SelectList 不显示我的值

SelectList not showing my values

谁能告诉我为什么会有这段代码

@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 个选项,都说 'System.Web.Mvc.SelectListItem'

我做错了什么?

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

在第一个示例中,您有一个值类型数组,因此 .ToString() 输出“1”、“2”等。

在第二个示例中,您有一个 SelectListItem 数组,其 .ToString() 方法输出 "SelectListItem".

要生成正确的 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),并且在绑定到 [=43= 时忽略最后一个参数 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" }
})