我的观点中有以下内容:
<%= 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>
关于我做错了什么的任何线索?
答案 0 :(得分:0)
为什么不在自定义视图模型中构建选择列表,只是从视图本身中的那个引入?
又名:
SelectList RolesList = new SelectList(roles, "RoleID", "RoleName", user.RoleID);
<%= Html.DropDownList("RoleID", Model.RolesList, "Select a Role...", new { @class = "required" }) %>
编辑:roles是一个IQueryable对象,只是一个具有roleid,rolename列的LINQ对象
其中roleID是关联所选值的键,user.roleid是要选择的值。
这适用于我的一些MVC应用程序
答案 1 :(得分:0)
嘿,感谢您的意见和建议,并对延迟反馈道歉。
似乎DropDownList扩展方法重载optionLabel
参数是罪魁祸首。
如果我拿出它(Model.SourceTablesOptionLabel
),无论选择列表的创建方式和位置以及我如何设置其选定值,都会按预期选择正确的项目。
我应该看看asp.net mvc源码,看看到底发生了什么以及为什么会发生这种情况,但是现在我的截止日期太紧,不能花更多时间在这上面了:)