2010-02-10 28 views
0

我有我的觀點如下:ASP.NET MVC:的SelectList忽略構造了selectedValue參數

<%= Html.DropDownList("Schema.MetaData.SourceTableName", new SelectList(Model.Schema.MetaData.SourceTableNames, Model.Schema.MetaData.SourceTableName), Model.SourceTablesOptionLabel)%> 

SourceTableNames的類型是List<string>

,當我填充模型,我賦值對於SourceTableName使用下面的方法在我的視圖模型:

public void SetDefaultSourceTable(string mostLikelyCandidate) 
{ 
    Debug.Assert(this.Schema.MetaData.SourceTableNames.Contains(mostLikelyCandidate)); 
    this.Schema.MetaData.SourceTableName = mostLikelyCandidate; 
} 

(該Debug.Assert表明,無論我傳遞的是SourceTabl的一部分eNames列表)

不幸的是,無論我傳遞給方法,即使所有屬性都是正確的,即使我把視圖本身斷點,第一選擇總是選擇

<SELECT id=Schema_MetaData_SourceTableName name=Schema.MetaData.SourceTableName> 
    <OPTION selected>Table A</OPTION> 
    <OPTION>Table B</OPTION> 
    <OPTION>Table C</OPTION> 
</SELECT> 

任何線索至於我做錯了什麼?

+1

不知道這是不是問題,但你需要在'SelectList.Items [你想選擇的索引]上設置選定的值.Selected = true;'除此之外,我沒有看到你設置的位置選擇的價值。 – 2010-02-10 15:47:36

+0

您何時/何時調用方法「SetDefaultSourceTable」? – 2010-02-10 17:11:00

回答

0

嘿,感謝您的意見和建議,以及延遲反饋道歉。

看來,參數optionLabel參數中的DropDownList擴展方法超載是罪魁禍首。

如果我把它拿出來(Model.SourceTablesOptionLabel),無論選擇列表如何創建以及如何設置其選定值,都會按預期選擇正確的項目。

我也許應該看看在asp.net mvc的源代碼,看看到底發生了什麼以及爲什麼發生這種情況,但現在我在過緊的最後期限花更多的時間在這:)

0

爲什麼不在自定義視圖模型中構造selectlist,只需從視圖本身中引入?

又名:

SelectList RolesList = new SelectList(roles, "RoleID", "RoleName", user.RoleID); 

<%= Html.DropDownList("RoleID", Model.RolesList, "Select a Role...", new { @class = "required" }) %> 

編輯:角色是一個IQueryable對象,只是一直角色ID一個LINQ對象,角色名列

其中角色ID的關鍵在於所選擇的價值相關聯,user.roleid是要選擇的值。

這部作品在我的幾個MVC應用程序