<div><p>例1:如果在Action方法中有如下代码:</p><p>List<SelectListItem> items = new List<SelectListItem>(); items.Add(new SelectListItem { Text = "Kirin", Value = "29" });
items.Add(new SelectListItem { Text = "Jade", Value = "28", Selected = true});
items.Add(new SelectListItem { Text = "Yao", Value = "24"});
ViewData["list"] = items;</p><div style="page-break-after: always;"><span style="display: none;"><!--more-->& nbsp ;</span></div><p>在View中这样使用:<%=Html.DropDownList("list")%> </p><p>例2:如果Action中代码如下:</p><pre>List<SelectListItem> items = new List<SelectListItem>(); items.Add(new SelectListItem { Text = "Kirin", Value = "29" }); items.Add(new SelectListItem { Text = "Jade", Value = "28"}); items.Add(new SelectListItem { Text = "Yao", Value = "24"}); this.ViewData["list"] = items; this.ViewData["selected"] = 24;</pre><p>View中的代码如下:</p><pre><%=Html.DropDownList("selected", ViewData["list"] as IEnumerable<SelectListItem>)%></pre><pre> </pre><p>那么辅助方法将ViewData["list"]绑定为下拉框,然后从ViewData中获取key为selected的项,并将下list中Value值与该项的值相等的SelecteListItem设为默认选中项。</p><p>以上两种方法尽管可以实现DropDownList的正确显示,但并非最佳实践。</p><p> </p><p>最佳方法:</p><p>ASP.NET MVC为DropDownList和ListBox(都在html中使用select标记)准备了一个辅助类型:SelectList。SelectList继承自MultiSelectList,而后者实现了IEnumerable<SelectListItem>。也就是说,SelectList可以直接作为Html.DropDownList方法的第二个参数。</p><p>MultiSelectList包含四个属性,分别为:</p><ul> <li>Items:用于在select标记中出现的列表,通常使用option标记表示。IEnumerable类型。</li> <li>DataTextField:作为option的text项,string类型。</li> <li>DataValueField:作为option的value项,string类型。</li> <li>SelectedValues:选中项的value值,IEnumerable类型。</li></ul><p>显然,作为DropDownList来说,选中项不可能为IEnumerable,因此SelectList提供了一个新的属性:</p><ul> <li>SelectedValue:选中项的value值,object类型。</li></ul><p>同时,SelectList的构造函数如下所示:</p><pre>public SelectList(IEnumerable items, string dataValueField, string dataTextField, object selectedValue) : base(items, dataValueField, dataTextField, ToEnumerable(selectedValue)) { SelectedValue = selectedValue; }</pre><p>于是我们的代码变为:</p><pre>var users = GetUsers(); var selectList = new SelectList(users, "Age", "Name", "24"); this.ViewData["list"] = selectList;</pre><pre><%=Html.DropDownList("list")%></pre><pre>这才是MVC最佳方案</pre></div>