MVC SelectList vs MultiSelectList

时间:2010-12-15 17:27:16

标签: asp.net-mvc-2 selectlist multi-select mvchtmlstring

在MVC中,SelectList派生自MultiSelectList。我不能说出他们之间的区别。对于两者,我必须告诉它选择多个项目(我希望不必这样做,因为名称中有“multi”)。

如果在下面的代码中用“MultiSelectList”替换“SelectList”,它将生成相同的HTML:

<% 
var leftSelectList = new SelectList(Model.LeftSide,"Key","Value");
var attrs = new SortedDictionary<string, object> {{"class", "ui-widget"}};
MvcHtmlString disabledStyle = MvcHtmlString.Create(Html.Encode("'width:50px;'"));
attrs.Add("style", disabledStyle);
attrs.Add("multiple", "multiple");
attrs.Add("size", "5"); /*-- how many items to show--*/        
var leftItems =  Html.DropDownList("ddlLeftItems", leftSelectList, attrs); %>

<%= leftItems.ToHtmlString()%>

生成的HTML是:

<select class="ui-widget" id="ddlLeftItems" multiple="multiple" name="ddlLeftItems" size="5" style="&amp;#39;width:50px;&amp;#39;">
  <option value="1">A</option>
  <option value="2">B</option>
  <option value="3">C</option>
  <option value="5">E</option>
  <option value="9">I</option>
</select>

那么,我应该使用哪一个?谢谢。

2 个答案:

答案 0 :(得分:5)

SelectList对象不生成HTML。它会创建一个项目列表,然后可以在其他地方使用。 DropDownList帮助函数是生成页面上使用的HTML的原因,这就是为什么你会看到完全相同的HTML。

SelectList对象派生自MultiSelectList,但为您提供了一个属性来获取单个选定值(称为SelectedValue)。 MultiSelectList只有一个名为SelectedValues的属性,它包含所有选定的值。

因此,如果您正在进行多选列表,那么您使用哪一个并不重要,但如果您正在执行单选列表,那么您应该使用SelectList,因为它可以更容易地获取选定的价值。

答案 1 :(得分:2)

MultiSelectList与Html.ListBoxHtml.ListBoxFor方法一起使用。这些助手会生成:HTML select multiple Attribute