我正在编写一个旧项目,然后多年来由几个人修补。在某些地方,他们使用了SelectedValue属性和其他使用SelectedItem.Value的地方。
问题 SelectedValue
或SelectedItem.Value
的{{1}}只是一个语法糖?哪一个表现更好?
编辑:SelectedItem.Text已替换为SelectedItem.Value
答案 0 :(得分:54)
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
会返回“管理员”,这与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的一大优点是使用Binding表达式时。
编辑数据绑定方案(不能使用SelectedItem.Value)
<asp:Repeater runat="server">
<ItemTemplate>
<asp:DropDownList ID="ddlCategories" runat="server"
SelectedValue='<%# Eval("CategoryId")%>'>
</asp:DropDownList>
</ItemTemplate>
</asp:Repeater>
答案 1 :(得分:7)
两者之间的一个重要区别(在Reflected代码中可见)是如果选择了nothing,则SelectedValue将返回空字符串,而SelectedItem.Value将抛出NullReference异常。
答案 2 :(得分:4)
他们都不同。 SelectedValue
属性为您提供所选项目的实际值,而SelectedItem.Text
为您提供显示文本。例如:你下拉可能有像
<asp:ListItem Text="German" Value="de"></asp:ListItem>
因此,在这种情况下,SelectedValue
将为de
而SelectedItem.Text
将提供德语&#39;
修改强>
在这种情况下,它们都是相同的...原因SelectedValue
将为您提供下拉列表中当前所选项目的存储值,SelectedItem.Value
将是当前所选项目的值。
所以他们俩都会给你相同的结果。
答案 3 :(得分:0)
在droupDown列表中有两个项目添加属性。
1)文字 2)价值
如果你想获得text属性,那么你可以使用selecteditem.text
如果要选择value属性,请使用selectedvalue属性
在你的情况下,无论你使用selectedvalue还是selecteditem.text
,值和文本属性都是相同的如果两者不同,那么它们会给我们不同的结果
答案 4 :(得分:0)
小心使用SelectedItem.Text ... 如果没有选择任何项,则SelectedItem将为null,SelectedItem.Text将生成空值异常。
.NET应该提供一个SelectedText属性,就像SelectedValue属性一样,当没有选中的项时返回String.Empty。