MVC下拉框选定值无效

9

我正在使用MVC 5。

我有一个ViewBag用于列表,如下:

ViewBag.TitleList = new SelectList((new string[] { "Mr", "Miss", "Ms", "Mrs" }), contact.Title);
//contact.Title has selected value.

然后我尝试将数组转换为 SelectListItem(但没有成功)

在视图中,它看起来像是

@Html.DropDownListFor(model => model.Title, ViewBag.TitleList as SelectList, "Select")

我也尝试过

@Html.DropDownList("Title", ViewBag.TitleList as SelectList, "Select")

列表已成功加载,但未选择选定的值。如何解决这个问题?

更新 罪魁祸首是ViewBag.Title与我的model.Title匹配。将我的model属性重命名为其他名称即可解决。Arrgh!


2
如果 model.Title 的值为(例如)“Miss”,则将选择第二个选项(您不需要在 SelectList 构造函数中使用第二个参数)。检查 Title 的值是否精确地匹配一个选项值。使用 @Html.DropDownListFor() - user3559349
是的,标题中的值与列表中的值匹配。 - Ruchan
可能是与该帖子重复。 - Tobias
谢谢您的更新。我花了30分钟想知道为什么我的标题下拉菜单没有被选中。在今天之前,我从未意识到这是个问题 - 谢谢! - VictorySaber
2个回答

10

在控制器中设置Title属性的值:

ViewBag.TitleList = new SelectList(new string[] { "Mr", "Miss", "Ms", "Mrs" });
viewModel.Title = "Miss"; // Miss will be selected by default

可能的另一个原因(根据下面的评论,这是正确的)是ViewData["Title"]被另一个值所覆盖。将Title属性的名称更改为任何其他名称,一切都应该正常工作。


在加载时,“Title”已经有了值,它是编辑方法的一部分。 - Ruchan
@Ruchan,如果Title的值不匹配这4个值中的任何一个(可能要检查空格),或者您正在尝试在循环中执行此操作。 - user3559349
4
@Ruchan,你是否使用Title作为关键字设置页面的标题:ViewBag.Title = "Edit"?尝试将属性名称更改为其他名称。 - Zabavsky
我也这么想,于是我改变了模型属性名称并尝试了一下,但结果仍然相同。 - Ruchan
好的,在最后终于是 ViewBag.Title ..... 我现在非常生气。编辑你的答案,这样我就可以选择它作为正确的答案。 - Ruchan

2

当未指定值(例如“Id”)时,DropDownListFor有时无法正常工作。尝试以下方法:

public class FooModel
{
    public int Id { get; set; }
    public string Text { get; set; }
}

var temp = new FooModel[] 
{
    new FooModel {Id = 1, Text = "Mr"}, new FooModel {Id = 2, Text = "Miss"},
    new FooModel {Id = 3, Text = "Ms"}, new FooModel {Id = 4, Text = "Mrs"}
                       };
ViewBag.TitleList = new SelectList(temp, "Id", "Text", 2);

编辑:其他解决方案

var temp = new []
{
    new SelectListItem {Value = "Mr", Text = "Mr"}, new SelectListItem {Value = "Miss", Text = "Miss"},
    new SelectListItem {Value = "Ms", Text = "Ms"}, new SelectListItem {Value = "Mrs", Text = "Mrs"}
};
ViewBag.TitleList = new SelectList(temp, "Value", "Text", "Miss");

看这里,Ivan。当你独立解决一个问题时,这就是所谓的“解决方案”。 - tozlu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接