MVC DropDownList选中的值不起作用

时间:2014-11-13 09:45:45

标签: c# asp.net-mvc asp.net-mvc-5 html.dropdownlistfor selectlist

我正在使用MVC 5.

我的ViewBag列表为

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

然后我尝试将数组转换为SelectListItem ( to no avail)

在视图上看起来像

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

我也试过

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

列表已成功加载Selected Value is Not selected。 如何解决这个问题?

更新 罪魁祸首是ViewBag.Title匹配我的模型。标题。将我的模型属性重命名为其他内容并且有效。 Arrgh!

2 个答案:

答案 0 :(得分:10)

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

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

另一个可能的原因(以及基于下面评论的正确原因)是ViewData["Title"]被另一个值覆盖。将Title属性的名称更改为任何其他属性,一切都应该有效。

答案 1 :(得分: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");