SelectList 构造函数未设置 SelectListItem 上的选定 属性
Selected property on SelectListItem not being set by SelectList constructor
我正在创建一个 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 那样单独遍历它们并为每个设置选择项?
Selected
属性是由SelectList
构造函数设置的。您显示的图像是针对 items
参数(即您传递给该方法的 SelectListItem
的集合),而不是调用该方法的结果。
构造函数不会修改传递给它的集合,它会创建一个新的 IEnumerable<SelectListItem>
,如果您检查 var x
的值,那么您会看到第二个 SelectListItem
(带有 Value = "2"
的那个)将其 Selected
属性 设置为 true
.
但是,SelectListItem
class 的目的是用于生成 <select>
的 HtmlHelper
方法之一(DropDownList()
,DropDownListFor()
、ListBox()
和 ListBoxFor()
方法)接受 IEnumerable<SelectListItem>
作为第一个或第二个参数。
除非您明确不绑定到模型 属性(例如 @Html.DropDownList("NotAModelProperty", Model.YourSelectList)
),否则设置 Selected
属性 将被忽略,因为该方法会根据所选选项设置关于您绑定的 属性 的值(有关更多详细信息,请参阅 ),因此使用 new SelectList(...)
从第一个创建新的 IEnumerable<SelectListItem>
是毫无意义的额外开销。
使用 SelectList
构造函数的原因是从现有对象集合创建 IEnumerable<SelectListItem>
,例如
IEnumerable<SelectListItem> options = new SelectList(db.Flavors, "ID", "Name")
将从Flavors
table获取记录,并根据ID
属性设置Value
,[=39] =] 基于其 Name
属性。它只是提供了使用 (say)
的替代方法
IEnumerable<SelectListItem> options = db.Flavors.Select(x => new SelectListItem
{
Value = x.ID.ToString(),
Text = x.Name
});
我正在创建一个 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 那样单独遍历它们并为每个设置选择项?
Selected
属性是由SelectList
构造函数设置的。您显示的图像是针对 items
参数(即您传递给该方法的 SelectListItem
的集合),而不是调用该方法的结果。
构造函数不会修改传递给它的集合,它会创建一个新的 IEnumerable<SelectListItem>
,如果您检查 var x
的值,那么您会看到第二个 SelectListItem
(带有 Value = "2"
的那个)将其 Selected
属性 设置为 true
.
但是,SelectListItem
class 的目的是用于生成 <select>
的 HtmlHelper
方法之一(DropDownList()
,DropDownListFor()
、ListBox()
和 ListBoxFor()
方法)接受 IEnumerable<SelectListItem>
作为第一个或第二个参数。
除非您明确不绑定到模型 属性(例如 @Html.DropDownList("NotAModelProperty", Model.YourSelectList)
),否则设置 Selected
属性 将被忽略,因为该方法会根据所选选项设置关于您绑定的 属性 的值(有关更多详细信息,请参阅 new SelectList(...)
从第一个创建新的 IEnumerable<SelectListItem>
是毫无意义的额外开销。
使用 SelectList
构造函数的原因是从现有对象集合创建 IEnumerable<SelectListItem>
,例如
IEnumerable<SelectListItem> options = new SelectList(db.Flavors, "ID", "Name")
将从Flavors
table获取记录,并根据ID
属性设置Value
,[=39] =] 基于其 Name
属性。它只是提供了使用 (say)
IEnumerable<SelectListItem> options = db.Flavors.Select(x => new SelectListItem
{
Value = x.ID.ToString(),
Text = x.Name
});