Отправка массива объектов json в действие с помощью ajax в asp.net mvc 3
Я надеюсь, что кто-нибудь может мне помочь (извините за мой английский). У меня проблема, когда я хочу отправить массив массивов в ajax. Моя модель:
<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>
Контроллер:
<code> [HttpPost] public ActionResult CheckPreferences(SJSonModelList postData) { BindUserFeatures(postData.Features); return Json(new { status = "Success", message = "Passed" }); } </code>
Вид упрощен:
<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>
Код JQuery:
<code> var isChecked = false; var features = new Array(); var menuItems = new Array(); var postData = new Array(); </code>
Здесь я заполняю функции, menuItems с помощью featureName / menuItemName и isChecked - логическое значение для каждой функции / 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>
Функция 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>
Когда я делаю оповещение (postData), на стороне клиента оно содержит истинные значения для каждого элемента, но в контроллере postData.Features и postData.MenuItems равны нулю.
Я попытался передать только один массив в контроллер тоже:
<code> features = JSON.stringify(features); </code>
в $ .ajax:
<code>{… data: features,…} </code>
в контроллере:
<code> ActionResult CheckPreferences(IEnumerable<SJSonModel> features) </code>
и все работает нормально, но я не знаю, как передать массив объектов json моему контроллеру. Поэтому я надеюсь получить ответ здесь :)
Большое спасибо.