Senden eines Arrays von JSON-Objekten an ajax in asp.net mvc 3

Ich hoffe, jemand kann mir helfen (Entschuldigung für mein Englisch). Ich habe ein Problem, wenn ich ein Array von Arrays in Ajax senden möchte. Mein Model ist:

<code>public class SJSonModel
{
    public string Name { get; set; }
    public bool isChecked { get; set; }     
}

public class SJSonModelList
{
    public List<SJSonModel> Features { get; set; }
    public List<SJSonModel> MenuItems { get; set; }
}
</code>

Der Controller:

<code>    [HttpPost]
    public ActionResult CheckPreferences(SJSonModelList postData)
    {
        BindUserFeatures(postData.Features);

        return Json(new { status = "Success", message = "Passed" });
    }
</code>

Die Ansicht vereinfacht:

<code><div class="Feature borderRadius Items">
    <h2>Title
        <input type="checkbox" class="Item" name="featureName"/>
    </h2> 

   <div class="FeatureDetails subItems">                 
        <a href="@Url…">featureName</a>
        <input type="checkbox" class="subItem" name="subItemName"/>
   </div> <!-- endOf FeatureDetails -->
</code>

Der JQuery-Code:

<code>    var isChecked = false;
    var features = new Array();
    var menuItems = new Array();
    var postData = new Array();
</code>

Hier fülle ich die Features, die menuItems mit dem featureName / menuItemName und isChecked boolean für jedes feature / menuItem

<code>menuItems.push({ "Name": $(this).attr('name'), "isChecked": isChecked });
features.push({ "Name": $(this).attr('name'), "isChecked": isChecked });

postData.push({ "features": features, "menuItems": menuItems });
postData = JSON.stringify(postData);
</code>

Die Ajax-Funktion:

<code>    $(':submit').click(function () {

        postData.push({ "features": features, "menuItems": menuItems });
        postData = JSON.stringify(postData);

        $.ajax({
                 url: '@Url.Action("CheckPreferences")',
                 type: 'POST',
                 data: postData, 
                 contentType: "application/json; charset=utf-8",
                 dataType: "json",
                 traditional: true,
                 success: function () { window.alert('@Resource.AjaxSuccess'); },
                 error: function (event, request, settings) {  window.alert('@Resource.AjaxError' + ' : ' + settings); },
                 timeout: 20000
        }); //endOf $.ajax
    }); //endOf :submit.click function
</code>

Wenn ich alert (postData) mache, enthält es auf der Clientseite die wahren Werte für jedes Element, aber im Controller sind postData.Features und postData.MenuItems null.

Ich habe versucht, nur ein Array an den Controller zu übergeben:

<code> features = JSON.stringify(features);
</code>

in $ .ajax:

<code>{… data: features,…}
</code>

im Controller:

<code> ActionResult CheckPreferences(IEnumerable<SJSonModel> features)
</code>

und es funktioniert gut, aber ich weiß nicht, wie ich das Array von JSON-Objekten an meinen Controller übergeben soll. Ich hoffe also, hier die Antwort zu finden :)

Vielen Dank.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage