SelectList没有显示我的值

时间:2015-11-24 11:54:18

标签: asp.net-mvc html-helper

有人可以告诉我为什么这段代码

@Html.DropDownList("priority2", new SelectList(new[] { 1,2,3 }, Model.Priority))

给了我一个很好的下拉选择1,2,3

但是这个

@Html.DropDownList("priority", new SelectList(new [] {
 new SelectListItem() { Value = "1", Text = "1. Priority" },
 new SelectListItem() { Value = "2", Text = "2. Priority" },
 new SelectListItem() { Value = "3", Text = "3. Priority" } }, 
Model.Priority)) 

给了我3个选项,都是'S​​ystem.Web.Mvc.SelectListItem'

我做错了什么?

1 个答案:

答案 0 :(得分:1)

SelectList()构造函数使用反射生成IEnumerable<SelectListItem>。如果您未指定dataValueFielddataTextField属性,则该方法在内部使用集合中对象的.ToString()值。

在第一个示例中,您有一个值类型数组,因此.ToString()输出&#34; 1&#34;,&#34; 2&#34;等

在第二个示例中,您有一个SelectListItem数组及其.ToString()方法输出&#34; SelectListItem&#34;。

对于生成正确html的第二个示例,它需要

@Html.DropDownList("priority", new SelectList(new []
{
    new SelectListItem() { Value = "1", Text = "1. Priority" },
    new SelectListItem() { Value = "2", Text = "2. Priority" },
    new SelectListItem() { Value = "3", Text = "3. Priority" }
}, "Value", "Text", Model.Priority))

其中第二个参数"Value"指定用于选项的SelectListItem属性的value的属性名称,第三个参数"Text"指定要使用的属性选项显示文字。

但是,这只是毫无意义的额外开销(从原始SelectList创建第二个SelectList),并且在绑定到属性时会忽略最后一个参数Model.Priority

相反,第二个例子可以简单地

@Html.DropDownListFor(m => m.Priority, new []
{
    new SelectListItem() { Value = "1", Text = "1. Priority" },
    new SelectListItem() { Value = "2", Text = "2. Priority" },
    new SelectListItem() { Value = "3", Text = "3. Priority" }
})