我有一个简单的下拉列表,用以下内容呈现:
@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
无论如何都会被覆盖?
答案 0 :(得分:0)
DropDownListFor使用lambda表达式的值来选择下拉列表中的项而不是SelectList
构造函数的最后一个参数。
我认为以下链接包含应该能够帮助您的示例代码:
答案 1 :(得分:0)
您对模型中的属性的强绑定,因此它是确定所选内容的属性的值。这就是模型绑定的工作原理。如果您希望选择"All"
,请设置Request.Value = -1
绑定到属性时,将忽略SelectList
构造函数的第4个参数。它唯一受到尊重的是你使用@Html.DropDownList("NotAPropertyOfMyModel, new (SelectList(...
附注:items
为IEnumerable<SelectListItem>
(这是DropDownListFor()
方法所需的内容),因此创建新的IEnumerable<SelectListItem>
(SelectList
是什么)只是毫无意义的额外开销。您的观点应该只是
@Html.DropDownListFor(m => m.Request.Value, items)