有人可以告诉我为什么这段代码
@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'
我做错了什么?
答案 0 :(得分:1)
SelectList()
构造函数使用反射生成IEnumerable<SelectListItem>
。如果您未指定dataValueField
和dataTextField
属性,则该方法在内部使用集合中对象的.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" }
})