我正在做一个老项目,多年来由几个人编写并修补.在某些地方,他们使用SelectedValue属性,而在其他地方,他们使用SelectedItem.价值
Question:是SelectedValue
只是SelectedItem.Value
的syntactic sugar还是SelectedValue
在引擎盖下的工作方式不同?哪一个表现更好?
Edit:个 Select 编辑.文本被SelectedItem替换.价值
我正在做一个老项目,多年来由几个人编写并修补.在某些地方,他们使用SelectedValue属性,而在其他地方,他们使用SelectedItem.价值
Question:是SelectedValue
只是SelectedItem.Value
的syntactic sugar还是SelectedValue
在引擎盖下的工作方式不同?哪一个表现更好?
Edit:个 Select 编辑.文本被SelectedItem替换.价值
SelectedValue
返回与SelectedItem.Value
相同的值.
SelectedItem.Value
和SelectedItem.Text
可能有不同的值,性能在这里不是一个因素,只有这些属性的含义才重要.
<asp:DropDownList runat="server" ID="ddlUserTypes">
<asp:ListItem Text="Admins" Value="1" Selected="true" />
<asp:ListItem Text="Users" Value="2"/>
</asp:DropDownList>
这里,ddlUserTypes.SelectedItem.Value == ddlUserTypes.SelectedValue
和两者都将返回值"1".
ddlUserTypes.SelectedItem.Text
将返回"Admins",这与ddlUserTypes.SelectedValue
不同
edit
在引擎盖下,SelectedValue如下所示
public virtual string SelectedValue
{
get
{
int selectedIndex = this.SelectedIndex;
if (selectedIndex >= 0)
{
return this.Items[selectedIndex].Value;
}
return string.Empty;
}
}
SelectedItem看起来像这样:
public virtual ListItem SelectedItem
{
get
{
int selectedIndex = this.SelectedIndex;
if (selectedIndex >= 0)
{
return this.Items[selectedIndex];
}
return null;
}
}
这两个属性之间的一个主要区别是,SelectedValue
也有setter,因为SelectedItem
没有.SelectedValue
中的getter在编写代码时更快,执行性能问题没有真正的理由讨论.SelectedValue的另一大优势是在使用绑定表达式时.
edit数据绑定场景(不能使用SelectedItem.Value)
<asp:Repeater runat="server">
<ItemTemplate>
<asp:DropDownList ID="ddlCategories" runat="server"
SelectedValue='<%# Eval("CategoryId")%>'>
</asp:DropDownList>
</ItemTemplate>
</asp:Repeater>