DropDownListFor selectedItem无法按预期工作

时间:2015-08-20 14:17:21

标签: c# asp.net-mvc-4 razor html.dropdownlistfor

我有一个简单的下拉列表,用以下内容呈现:

@Html.DropDownListFor(m => m.Request.Value, new SelectList(items, "Value", "Text", selectedElement), new {})

其中Model.Request.Value的类型为int,其值设置为-1。 items的构建方式如下:

var items = new List<SelectListItem<int>>();

items.Add(new SelectListItem<int>{Text = "10", Value = 10});
items.Add(new SelectListItem<int>{Text = "25", Value = 25});
items.Add(new SelectListItem<int>{Text = "100", Value = 100});
items.Add(new SelectListItem<int>{Text = "All", Value = -1});

selectedElement的值为25,类型为int。但是,它始终会选择All选择,这意味着值= -1。

为什么呢?为什么有一个值selectedElement无论如何都会被覆盖?

2 个答案:

答案 0 :(得分:0)

DropDownListFor使用lambda表达式的值来选择下拉列表中的项而不是SelectList构造函数的最后一个参数。

我认为以下链接包含应该能够帮助您的示例代码:

MVC DropDownList SelectedValue not displaying correctly

答案 1 :(得分:0)

您对模型中的属性的强绑定,因此它是确定所选内容的属性的值。这就是模型绑定的工作原理。如果您希望选择"All",请设置Request.Value = -1

的值

绑定到属性时,将忽略SelectList构造函数的第4个参数。它唯一受到尊重的是你使用@Html.DropDownList("NotAPropertyOfMyModel, new (SelectList(...

之类的东西

附注:itemsIEnumerable<SelectListItem>(这是DropDownListFor()方法所需的内容),因此创建新的IEnumerable<SelectListItem>SelectList是什么)只是毫无意义的额外开销。您的观点应该只是

@Html.DropDownListFor(m => m.Request.Value, items)