2011-10-11 37 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

嗯,我不混合請求和發佈參數,我和你一樣做同樣的事情。你是說它應該工作嗎?也許我錯過了一些東西。 –