Я передаю Json через вызов JQuery AJAX функции MVC, которая принимает Folder
. MVC правильно разбирает некоторые данные, но не список, который я отправил назад.Json не правильно разобрался с вызовом jQuery AJAX в MVC4
MVC
public class Folder : IValidate
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<SearchCriteria> SearchCriteria { get; set; }
}
public class SearchCriteria
{
public int FolderId { get; set; }
public int SettingsEntryID { get; set; }
public string SearchParameter { get; set; }
}
public ActionResult EditFolder(Folder folder)
{
service.EditFolder(folder);
return this.Json(Json(new { Success = true }));
}
Javascript
var folder = {
Id: $("#groupID").val(),
Name: $("#groupName").val(),
SearchCriteria: []
};
$(".searchCriteria").each(function() {
folder.SearchCriteria.push(
{
FolderId: $("#groupID").val(),
SearchParameter: $(this).val(),
SettingsEntryID: $(this).attr("id").replace("searchCriteria", "")
});
});
$.ajax({
url: "/settings/editfolder/",
type: "POST",
dataType: "json",
data: folder,
traditional: true,
success: function (data) {
alert("wsaved");
}
});
folder
, в этой функции получает набор с Id
и Name
но SearchCriteria
не установлен должным образом. Он установлен в null
. Если я прокомментирую traditional: true
, список будет создан, но все значения для каждого SearchCriteria
будут 0
или null
.
Я что-то упустил?
Вы * не * отправка JSON. Вы передаете объект как параметр «data:», а jQuery преобразует объект в строку запроса, например «Id = foo & Name = bar & ...». Если вы действительно хотите отправить JSON, вам нужно преобразовать объект в JSON, например 'data: JSON.stringify (JSON)'. Является ли это проблемой или нет, я не могу сказать (я не знаю MVC). –
Вам не хватает двух точек 1. 'contentType: 'application/json; charset = utf-8 ', '2.' data: JSON.stringify (папка), '** И одна коррекция. ** URL-адрес должен быть как« url: »@ Url.Action (« ActionName »,« ControllerName », new {area = "AreaName"}) "' –
Когда вы отправляете свое сообщение, Ajax фактически отправит что-то вроде 'SearchCriteria = Array' вместо фактического массива. Я не привязывал список к прошлому, но вы можете это проверить: http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx –