2011-10-11 38 views
1

我张贴的东西,看起来像这样:Asp.Net MVC 3 ModelBinding阵列

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.Count但不是每个动物的属性。

回答

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 
    } 
}); 
+0

嗯,我不混合请求和发布参数,我和你一样做同样的事情。你是说它应该工作吗?也许我错过了一些东西。 –