Wysyłanie tablicy obiektów json do akcji z ajaxem w asp.net mvc 3
Mam nadzieję, że każdy może mi pomóc (przepraszam za mój angielski). Mam problem, gdy chcę wysłać tablicę un tablic w ajax. Mój model to:
<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>
Kontroler:
<code> [HttpPost] public ActionResult CheckPreferences(SJSonModelList postData) { BindUserFeatures(postData.Features); return Json(new { status = "Success", message = "Passed" }); } </code>
Uproszczony widok:
<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>
Kod JQuery:
<code> var isChecked = false; var features = new Array(); var menuItems = new Array(); var postData = new Array(); </code>
Wypełniam tutaj funkcje, menuItemes z featureName / menuItemName i isChecked boolean dla każdej funkcji / 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>
Funkcja 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>
Kiedy robię alert (postData), po stronie klienta zawiera on prawdziwe wartości dla każdego elementu, ale w konrolerze postData.Features i postData.MenuItems mają wartość null.
Próbowałem też przekazać do sterownika tylko jedną tablicę:
<code> features = JSON.stringify(features); </code>
w $ .ajax:
<code>{… data: features,…} </code>
w kontrolerze:
<code> ActionResult CheckPreferences(IEnumerable<SJSonModel> features) </code>
i działa dobrze, ale nie wiem, jak przekazać tablicę obiektów json mojemu kontollerowi. Mam więc nadzieję uzyskać odpowiedź tutaj :)
Dziękuję Ci bardzo.