#asp.net-mvc-3 #model-binding
#asp.net-mvc-3 #привязка модели
Вопрос:
Я публикую что-то похожее на это:
FavoritePerson: "Dennis"
FavoriteAnimals: [{Type="Bear", Name="Bruno"}, {Type="Shark", Name="Sammy"}, ...]
Есть ли какая-то форма для модели, чтобы DefaultModelBinder мог справиться с этим? Что-то вроде
class FavoriteAnimalSubmission {
string Type {get; set;}
string Name {get; set;}
}
[HttpPost]
public MarkFavorites(string favoritePerson, FavoriteAnimalSubmission[] favoriteAnimals[]) {
...
}
Заполнит favoritePerson и favoriteAnimals.Подсчитывайте, но не свойства каждого животного.
Ответ №1:
Нет ничего готового, что могло бы обрабатывать смесь JSON (что в вашем случае недопустимо) и стандартных параметров в кодировке url. Вам нужно будет написать пользовательскую привязку модели, если вам когда-либо понадобится обработать этот запрос. Или просто измените свой запрос на:
{
"FavoriteAnimals": [
{
"Type": "Bear",
"Name": "Bruno"
},
{
"Type": "Shark",
"Name": "Sammy"
}
],
"FavoritePerson": "Dennis"
}
а затем на сервере:
public class MyViewModel
{
public string FavoritePerson { get; set; }
public FavoriteAnimalSubmission[] FavoriteAnimals { get; set; }
}
public class FavoriteAnimalSubmission
{
public string Type { get; set; }
public string Name { get; set; }
}
и действие вашего контроллера:
[HttpPost]
public MarkFavorites(MyViewModel model)
{
...
}
и запрос AJAX для его вызова:
var model =
{
"FavoriteAnimals": [
{
"Type": "Bear",
"Name": "Bruno"
},
{
"Type": "Shark",
"Name": "Sammy"
}
],
"FavoritePerson": "Dennis"
};
$.ajax({
url: '@Url.Action("MarkFavorites", "SomeController")',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(model),
success: function(result) {
// do something with the result
}
});
Комментарии:
1. Хм, я не смешиваю параметры запроса и публикации, я делаю то же самое, что и вы. Вы хотите сказать, что это должно работать? Может быть, я что-то упускаю.