我创建SelectList
以传递给Html.DropDownList
,但正确的值似乎没有填充
var x = new SelectList(new[] {
new SelectListItem() { Value="1", Text="Vanilla"},
new SelectListItem() { Value="2", Text="Chocolate"},
new SelectListItem() { Value="3", Text="Strawberry"}
}, "Value", "Text", "2");
SelectList
应该采用引用selectedValue
:
public SelectList(
IEnumerable items,
string dataValueField,
string dataTextField,
object selectedValue
)
但这只会在整个集合上设置SelectedValue。个人SelectListItems
尚未设置为Selected
我是否需要单独迭代它们并为每个设置选择this question?
答案 0 :(得分:1)
由Selected
构造函数设置SelectList
属性 。您显示的图像是items
参数(即传递给方法的SelectListItem
的集合),而不是调用方法的结果。
构造函数不会修改传递给它的集合,它会创建一个新的IEnumerable<SelectListItem>
,如果你检查var x
的值,那么你会看到第二个SelectListItem
( Value = "2"
)的Selected
属性设置为true
。
但是,SelectListItem
类的目的是用于生成HtmlHelper
(<select>
,DropDownList()
,{DropDownListFor()
的{{1}}方法之一{1}}和ListBox()
方法)接受ListBoxFor()
作为第一个或第二个参数。
除非您明确没有绑定到模型属性(例如IEnumerable<SelectListItem>
),否则将忽略设置@Html.DropDownList("NotAModelProperty", Model.YourSelectList)
属性,因为该方法根据绑定的属性值设置所选选项(请参阅How to set “selectedValue” in DropDownListFor Html helper以获取更多详细信息),因此使用Selected
从第一个创建新的IEnumerable<SelectListItem>
是无意义的额外开销。
使用new SelectList(...)
构造函数的原因是从现有对象集合创建SelectList
,例如
IEnumerable<SelectListItem>
将从IEnumerable<SelectListItem> options = new SelectList(db.Flavors, "ID", "Name")
表中获取记录,并根据其Flavors
属性设置Value
,并根据ID
Text
设置Name
属性。它只是提供了使用(比如说)
IEnumerable<SelectListItem> options = db.Flavors.Select(x => new SelectListItem
{
Value = x.ID.ToString(),
Text = x.Name
});