SelectedValue与DropDownList的SelectedItem.Value

时间:2012-03-05 09:07:19

标签: asp.net .net drop-down-menu

我正在编写一个旧项目,然后多年来由几个人修补。在某些地方,他们使用了SelectedValue属性和其他使用SelectedItem.Value的地方。

问题 SelectedValueSelectedItem.Value的{​​{1}}只是一个语法糖?哪一个表现更好?

编辑:SelectedItem.Text已替换为SelectedItem.Value

5 个答案:

答案 0 :(得分:54)

SelectedValue返回与SelectedItem.Value相同的值。

SelectedItem.ValueSelectedItem.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为您提供显示文本。例如:你下拉可能有像

这样的itme
<asp:ListItem Text="German" Value="de"></asp:ListItem>

因此,在这种情况下,SelectedValue将为deSelectedItem.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。