繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM