ASP.NET MVC:SelectList忽略构造函数中的selectedValue参数

时间:2010-02-10 15:37:50

标签: c# .net asp.net-mvc

我的观点中有以下内容:

<%= 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> 

关于我做错了什么的任何线索?

2 个答案:

答案 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源码,看看到底发生了什么以及为什么会发生这种情况,但是现在我的截止日期太紧,不能花更多时间在这上面了:)