我发布的内容如下:
FavoritePerson: "Dennis"
FavoriteAnimals: [{Type="Bear", Name="Bruno"}, {Type="Shark", Name="Sammy"}, ...]
Model是否有一些形状可以让DefaultModelBinder能够处理这个?像
这样的东西class FavoriteAnimalSubmission {
string Type {get; set;}
string Name {get; set;}
}
[HttpPost]
public MarkFavorites(string favoritePerson, FavoriteAnimalSubmission[] favoriteAnimals[]) {
...
}
将填充favoritePerson和favoriteAnimals.Count,但不会填充每只动物的属性。
答案 0 :(得分:0)
没有开箱即可处理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
}
});