У меня есть объект на стороне сервера в моем коде MVC, который выглядит следующим образом:ASP.NET MVC модель Связывание с запросом Ajax JQuery
class Person
{
public long Id { get; set; }
public string Name { get; set; }
public IList<Friend> Friends { get; set; }
}
class Friend
{
public long Id { get; set; }
public string Name { get; set; }
}
От клиента JQuery, я делаю запрос AJAX и отправка следующих данные (разрывы строк, введенные для удобства чтения):
var personId = $(...
var personName = $(...
var friends = []; // array of associative arrays
for (var i = 0; i < _friends.length; i++) // _friends is is a global array object and is different from friends below
{
var friendId = $(...
var friendName = $(...)
friends[i] = { 'Id' : friendId, 'Name' : friendName };
}
... и так далее, чтобы получить значение в переменные
Учитывайте, что я посылаю, что должно войти в Person.Friends
, IList<T>
как массив JavaScript, где каждый элемент массива представляет собой ассоциативный список, который имеет свойства, подобные классу сервера Friend
.
Вот мой Ajax запрос:
$.ajax('/Strings/JsonCreateNew',
{
cache: false, async: false, type: 'POST',
data: {
'Id' : personId,
'Name' : personName,
'Friends' : friends},
dataType: 'json',
error: SaveNewFriendClientSideHandler.OnError,
success: SaveNewFriendClientSideHandler.OnSuccess
});
В моем контроллере, до тех пор, пока у меня есть FormCollection
получить данные, я получаю все мои данные, но я хотел бы связать с сильно типизированным лицом объект, так что если я изменю свое определение контроллера от:
[HttpPost]
public ActionResult JsonCreateNew(FromCollection person)
{
// I get all the data in the person.AllKeys property
return new EmptyResult();
}
к:
[HttpPost]
public ActionResult JsonCreateNew(Person person)
{
// the default ASP.NET MVC model binder isn't able to bind to this
// in fact, the routing module does not even route the request to this
// action, so this action never gets fired.
return new EmptyResult();
}
Я все еще получаю все свои данные, но меня действительно беспокоит IList<Friend>
.
Получено в Person
объекта в виде массива, который имеет правильное число Friends
объектов с именами свойств (Name
и Id
), но значения обоих свойств каждого Friend
объекта являются null
или 0, т.е. не инициализируется, даже когда есть значения, отправленные клиентом.
Пожалуйста, помогите.
Это не работает.Фактически, это даже сломало отправку запроса ajax. –
@ WaterCoolerv2 Я добавляю тест, и он работает, и я получаю объект person в деле serveride – MRB
@ WaterCoolerv2 Вы должны добавить 'contentType: "application/json"' и 'JSON.stringify()' в ваш запрос ajax, когда я их удалю , я также получаю нулевые значения на сервере – MRB