2011-04-09 115 views
5

使用ASP.NET MVC 3,我一直在努力爲強類型視圖使用幫助Html.DropDownListFor()函數設置下拉選定的值。Html.DropDownListFor() - 如何爲強類型視圖設置默認選定值?

爲模型的代碼如下所示:

@Html.DropDownListFor(model => model.Language, 
    new SelectList(ViewBag.AllPossibleLanguages, 
    "Code", "DisplayName", Model.Language.Code)) 

有幾個解決方法,如使用

@Html.DropDownList("LanguageCode", 
    new SelectList(ViewBag.PossibleLanguages, 
     "Code", "DisplayName", Model.Language.Code)) 

和好奇:

public class ResourceView 
{ 
    ... 
    public Language Language { get; set; } 
} 

public class Language 
{ 
    public string DisplayName { get; private set; }  
    public string Code { get; private set; }  
    public override string ToString() { return DisplayName; } 
} 

,並在視圖中足夠了,以上的代碼不會工作如果第一個標準ameter設置爲「語言」,與模型中的屬性名稱相同。

我也可以這樣做

@Html.DropDownListFor(model => model.Language, 
    new SelectList(ViewBag.AllPossibleLanguages)) 

將與適當選擇的值以及工作,但只有語言類的ToString()值將顯示和我想要的實際語言代碼在選項標籤中不會設置,這並不奇怪,因爲沒有任何標識Code字段應該用作值屬性。

我也可以使用jquery事件處理程序來解決這個問題,事件處理程序隨後選擇適當的值。不過,我很好奇爲什麼這不能按預期工作,並希望在可能的情況下妥善解決。

+0

TL; DR:這是在'新的SelectList第四個參數(項目,dataValueField,dataTextField,了selectedValue)' – 2013-10-16 15:29:34

回答

4

@Html.DropDownListFor的第一個參數是您的模型的屬性,選定的值將被綁定到Post上。當你說@Html.DropDownListFor(model => model.Language)時,默認聯編程序將無法確定您的語言類中的哪個屬性需要綁定選定值,在下拉列表的情況下,該值將始終爲單個字符串或整數。出於同樣的原因@Html.DropDownList("LanguageCode")的作品。

如果您想改變行爲,您可以隨時擴展默認的模型聯編程序。

編輯:

你可以試試,我認爲要解決這種情況下你的問題。

@Html.DropDownListFor(model.Language.Code, new SelectList(ViewBag.AllPossibleLanguages)) 
+0

這似乎工作: @ Html.DropDownListFor(型號=> model.Language.Code,新SelectList(ViewBag.PossibleLanguages,「Code」,「DisplayName」)) 我認爲它只能綁定到模型的直接屬性,而不是綁定到它的關係的屬性。仍然有一個問題,但它似乎自動創建一個名爲「Language.Code」的表單參數名稱,我不知道如何綁定到帶有「。」的表單參數。在他們內部的控制器? – 2011-04-10 06:52:20

+0

以語言爲參數解決了上述問題。顯然,模型聯編程序將處理參數名稱內的時間段。 – 2011-04-10 06:59:10

相關問題