2010-02-10 72 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应用程序