2012-04-06 15 views
5

Ich habe folgende JavaScript-Klasse, die ich hier zu einer ASP.NET MVC-ControllerPassing Javascript-Array zu ASP.NET MVC-Controller

var postParams = { 

     attributes : [ 
         { 
          name : '', 
          description: '', 
          attributeType : '', 
          value : '' 
         } 
         ] 
    }; 

postParams.attributes[0] = new Object(); 
postParams.attributes[0].name = "test"; 
postParams.attributes[0].description = "test"; 
postParams.attributes[0].attributeType = "test"; 
postParams.attributes[0].value = "test"; 

passieren bin versucht, wie ich die Controller-Methode aufrufen:

var actionURL = "@Url.Action("Save", "Catalog")"; 
    $.ajax({ 
        type: "POST", 
        url: actionURL, 
        data: postParams ...... 

Auf der Seite-Controller ich habe ein Ansichtsmodell erklärt wie folgt: Methode ist

public class AttributeViewModel 
{ 
    public string name { get; set; } 
    public string description { get; set; } 
    public string attributeType { get; set; } 
    public string value { get; set; } 
} 

My-Controller speichern de erklärtes wie folgt:

public JsonResult Save(AttributeViewModel[] attributes) 

Wenn ich den Wert von Attributen ausführen immer null ist.

Irgendwelche Ideen? Ich bin mir nicht sicher, wie ich überhaupt mit dem Debuggen beginnen soll.

Antwort

6

können Sie json.net Bibliothek versuchen Ihr Problem

[JsonFilter(Param = "attributes", JsonDataType = typeof(AttributeViewModel[]))] 
    public JsonResult Save(AttributeViewModel[] attributes) 

Am Client zu lösen:

$.ajax({ 
     type: 'POST', 
     url: url, 
     async: true, 
     data: JSON.stringify(attributes), //!!! Here must be the same name as in controller method 
     dataType: 'json', 
     contentType: 'application/json; charset=utf-8', 
     success: function (data) { 

     }, 
     error: function (xhr, ajaxOptions, thrownError) { 

     } 
    }); 
+0

Danke für den Vorschlag. Es wurde ein Verweis auf Json.net hinzugefügt und der Filter hinzugefügt, aber null wird weiterhin an Attribute übergeben. – Lance

+0

@Lance Antwort aktualisiert mit Client-Code –

+0

Danke Sanja, Hinzufügen von JSON.stringify() hat ein Vergnügen gemacht !! – Lance

1

Scheinen, wie Sie traditional : true zum Ajax-Aufruf hinzufügen müssen. Werfen Sie einen Blick here und here

$.ajax({ 
       traditional: true, 
       type: "POST", 
       url: actionURL, 
       data: postParams 
+0

Hinzugefügt in traditionell: wahr, aber es hat das Problem nicht gelöst. Ich habe das schon zu lange gemacht, also gebe ich jetzt ein Komma-getrenntes Array an den Controller weiter. – Lance