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
不同。
编辑
实际上,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
的巨大优势也体现出来了。
编辑 数据绑定场景(无法使用 SelectedItem.Value)
<asp:Repeater runat="server">
<ItemTemplate>
<asp:DropDownList ID="ddlCategories" runat="server"
SelectedValue='<%# Eval("CategoryId")%>'>
</asp:DropDownList>
</ItemTemplate>
</asp:Repeater>
SelectedItem
将根据其值选择一个项目,而不是索引。这意味着如果您有多个具有相同Value
的项目,则可能SelectedItem
返回错误的项目。 - Rachel