2011-06-15 21 views
2

我有一個強類型的視圖模型,MyViewModel,這種結構:爲什麼收藏不會通過郵件傳遞?

public name { get; set; } 
public IEnumerable<Country> { get; set; } 

我填充的變量,像這樣在一個控制器動作,指數:

string name = GetName(); 
IEnumerable<Country> countries = GetCountres(); 

然後我創建一個視圖模型並返回它:

var model = new MyViewModel 
{ 
name = name, 
countries = countries 
}; 

當指數被調用時,一切順利,我能夠用「國家」的IEnumerable在DropDownListFor通話。然而,當我提交表單,張貼到控制器,看起來像這樣:

public ActionResult Index(MyViewModel model) 

我只能訪問從我的模型「簡單」變量;字符串,int,十進制,bool等。任何IDictionariess或IEnumerables都爲null。我已經看到了一些例子,人們只需重新從他們的數據訪問調用中重新列出列表,但是當你有數據的時候,這看起來很愚蠢。當我有兩個多選框時,用戶可能會將項目從一個框移動到另一個框,這特別令人討厭。如果他們提交和驗證失敗,我將失去他們對盒子所做的更改。有沒有辦法來解決這個問題?

回答

1

asp.net mvc僅將這些值綁定到通過不同表單域發佈的模型,以及僅當值(如果未配置爲其他方式)才選擇列表帖子。所以將綁定到列表的唯一值是視圖模型中的name屬性。

IEnumerable<Country> countries 

必須在post操作結果中再次填充以防出現錯誤。至於你的第二點(我相信它沒有發生在你發佈的代碼中),你的下拉列表應該發佈多個值,如果這樣的話,這些值將映射到模型的IEnumerable屬性。你可以發佈代碼,所以我們可能會幫助

+0

這基本上是導致問題的代碼 - 減去我調用實際存儲庫而不是一些GetCountries()方法的事實。我分配一個IEnumerable,將它傳遞給模型構造函數,返回一個View,然後發佈到期望該模型的另一個動作;當我這樣做時,我的IEnumerable爲null。 – raoul1034 2011-06-16 14:38:15

+0

你可以編輯你的問題來發布你試圖發佈的視圖代碼 – 2011-06-16 16:04:22

相關問題