【发布时间】:2014-01-16 14:42:34
【问题描述】:
我遇到了与 ASP.Net MVC4 的 DropDownListFor 实现不一致的问题。
在我的 ViewModel 中,我有两个字符串属性 Title 和就业状态,它们具有数据注释来验证模型。当 ModelState.IsValid 为 false 并且用户被发送回我的输入表单时,标题下拉列表默认为列表中的第一项,而不是绑定到 ViewModel 的值。但是,EmploymentStatus 下拉列表的行为符合预期,我无法轻易看出差异。
我的 ViewModel 包含以下属性:
[Display(Name = "Title")]
[RegularExpression("^omitted$", ErrorMessage="Please enter a title")]
public String Title
{
get;
set;
}
[Display(Name = "Employment status?")]
[RegularExpression("^omitted$", ErrorMessage = "Please enter your employment status")]
public String EmploymentStatus
{
get;
set;
}
My View 包含以下两行来呈现下拉列表:
@Html.DropDownListFor(m => m.Title, new SelectList(LookupService.GetTitleLookup(),"Key","Value", Model.Title)
@Html.DropDownListFor(m => m.EmploymentStatus, new SelectList(LookupService.GetEmploymentStatusLookup(),"Key","Value", Model.EmploymentStatus))
LookupService 方法都返回 Dictionary 对象: 例如
- “先生”、“先生”
- “夫人”、“夫人”
等
“F”、“全职”
- “P”、“兼职”
- 等
作为 SelectList 构造函数的一部分,它允许您设置 SelectedValue(在我的例子中为 Model.Title),在调试时我已经逐步完成并确认 Model 值是有效的。
似乎有很多人对 DropDownListFor 不显示 selectedValue 有问题,而且内部实现有时会使用默认值而不是传入的选定值,而且它不支持索引属性,似乎也不支持适用于我的情况。
任何帮助将不胜感激。 谢谢
【问题讨论】:
标签: asp.net-mvc-4