Enviando uma matriz de objetos json para ação com ajax em asp.net mvc 3
Espero que alguém possa me ajudar (Desculpe pelo meu inglês). Eu tenho um problema quando eu quero enviar uma matriz de matrizes em ajax. Meu modelo é:
<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>
O controlador:
<code> [HttpPost] public ActionResult CheckPreferences(SJSonModelList postData) { BindUserFeatures(postData.Features); return Json(new { status = "Success", message = "Passed" }); } </code>
A visão simplificada:
<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>
O código do JQuery:
<code> var isChecked = false; var features = new Array(); var menuItems = new Array(); var postData = new Array(); </code>
Aqui eu preencho os recursos, o menuItems com o featureName / menuItemName e isChecked booleano para cada recurso / 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>
A função ajax:
<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>
Quando eu faço alerta (postData), no lado do cliente, ele contém os valores verdadeiros para cada item, mas no conroller o postData.Features e o postData.MenuItems são nulos.
Eu tentei passar apenas uma matriz para o controlador também:
<code> features = JSON.stringify(features); </code>
em $ .ajax:
<code>{… data: features,…} </code>
no controlador:
<code> ActionResult CheckPreferences(IEnumerable<SJSonModel> features) </code>
e funciona bem, mas eu não sei como passar a matriz de objetos json para o meu contoller. Então, espero recuperar a resposta aqui :)
Muito obrigado.