我无法让DropDownList将所选项目设置为模型中的值。
模型中的字段只是用户名称标题的字符串(Mr,Miss等)。到目前为止,下面是我的代码。
<td>
@{ var list = new List<SelectListItem>(new[] {
new SelectListItem{ Selected = string.IsNullOrEmpty(Model.Title), Text="",Value=""},
new SelectListItem{ Selected = Model.Title.Equals("Mr"), Text="Mr",Value="Mr"},
new SelectListItem{ Selected = Model.Title.Equals("Mrs"), Text="Mrs",Value="Mrs"},
new SelectListItem{ Selected = Model.Title.Equals("Miss"), Text="Miss",Value="Miss"},
new SelectListItem{Selected = Model.Title.Equals("Ms"), Text="Ms",Value="Ms"}
});
}
@Html.DropDownListFor(m=>m.Title, list)
</td>
答案 0 :(得分:21)
我在MVC 3中遇到了这个问题,结果发现我在我的View上设置了 ViewBag.Title (使用它作为页面标题)。只要我将其更改为 ViewBag.PageTitle ,下拉列表代码就会开始工作:@Html.DropDownListFor(model => model.Title, Model.MySelectList)
原因是在MVC 2/3中,任何ViewBag / ViewData属性与Model对象中的名称相同都会在{{>> 中使用{ {1}},因此您需要重命名它们以确保它们不会发生冲突。因为这看起来非常不稳定,所以我完全停止使用ViewBag,现在只依赖于View Model将内容传递给View。
这个问题如此普遍的原因是 ViewBag.Title 在许多介绍性教程和演示代码中用于设置HTML标题元素,因此不可避免地被采纳为“最佳实践”做法。但是,标题是一个自然的模型属性名称,用于“用户详细信息”视图的下拉列表。
答案 1 :(得分:12)
事实证明,它不起作用的唯一原因是因为我的字段名称是Title,我将其更改为Prefix并且我的确切代码有效。花太多时间找出来......
这是工作代码。
<td>
@{ var list = new List<SelectListItem>(new[] {
new SelectListItem {
Selected = string.IsNullOrEmpty(Model.Prefix),
Text="",
Value=""
},
new SelectListItem {
Selected = Model.Prefix.Equals("Mr"),
Text="Mr",
Value="Mr"
},
new SelectListItem {
Selected = Model.Prefix.Equals("Mrs"),
Text="Mrs",
Value="Mrs"
},
new SelectListItem {
Selected = Model.Prefix.Equals("Miss"),
Text="Miss",
Value="Miss"
},
new SelectListItem {
Selected = Model.Prefix.Equals("Ms"),
Text="Ms",
Value="Ms"
}
});
}
@Html.DropDownListFor(m => m.Prefix, list)
</td>