【问题标题】:MVC 4 DropDownListFor is not populating the select list with the value in the ModelMVC 4 DropDownListFor 未使用模型中的值填充选择列表
【发布时间】: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


    【解决方案1】:

    刚刚花了 5 个小时试图弄清楚为什么会发生在我身上,答案在于你调用下拉列表的项目的名称,即“标题”,我敢打赌你也在设置在页面标题的 ViewBag 上

    即。

    @{
    Viewbag.Title="My Page Title"
    }
    

    为了证明这一点,在 Viewbag 上添加一个名为“EmploymentStatus”的属性,您会发现它停止工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-12
      • 1970-01-01
      相关资源
      最近更新 更多