[英]ASP.NET MVC: SelectList ignores selectedValue parameter in constructor
我认为以下内容:
<%= 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
演示了我传递的内容都是SourceTableNames列表的一部分)
不幸的是,无论我使用哪种方法,即使所有属性都是正确的,即使我在视图本身中设置了断点,也始终会选择第一个选项
<SELECT id=Schema_MetaData_SourceTableName name=Schema.MetaData.SourceTableName>
<OPTION selected>Table A</OPTION>
<OPTION>Table B</OPTION>
<OPTION>Table C</OPTION>
</SELECT>
关于我在做什么错的任何线索吗?
为什么不在自定义视图模型中构造选择列表,而只从视图本身中拉入选择列表呢?
又名:
SelectList RolesList = new SelectList(roles, "RoleID", "RoleName", user.RoleID);
<%= Html.DropDownList("RoleID", Model.RolesList, "Select a Role...", new { @class = "required" }) %>
编辑:角色是一个IQueryable对象,只是一个具有roleid,rolename列的LINQ对象
其中roleID是与所选值关联的键,而user.roleid是要选择的值。
这适用于我的一些MVC应用程序
嘿,感谢您的评论和建议,并为延迟的反馈表示歉意。
似乎是在使用optionLabel
参数的DropDownList扩展方法重载才是罪魁祸首。
如果我将其取出( Model.SourceTablesOptionLabel
),则将按预期选择正确的项目,而不管SelectList的创建方式和位置以及如何设置其选定值。
我可能应该看看asp.net mvc的源代码,以确切了解正在发生的事情以及为什么会发生这种情况,但是现在我的期限太紧了,无法花更多时间在此:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.