Asp.net SelectedValue vs SelectedItem.DropDownList的值

Asp.net SelectedValue vs SelectedItem.DropDownList的值,asp.net,.net,drop-down-menu,Asp.net,.net,Drop Down Menu,我正在做一个老项目,多年来由几个人编写并修补。在某些地方,他们使用SelectedValue属性,而在其他地方,他们使用SelectedItem.Value 问题:是否SelectedValue只是SelectedItem.Value或SelectedValue在引擎盖下的作用不同?哪一个表现更好 Edit:SelectedItem.Text已替换为SelectedItem.Value在DroodDown列表中,有两项添加属性 <asp:Repeater runat="server">

我正在做一个老项目,多年来由几个人编写并修补。在某些地方,他们使用SelectedValue属性,而在其他地方,他们使用SelectedItem.Value

问题:是否
SelectedValue
只是
SelectedItem.Value
SelectedValue
在引擎盖下的作用不同?哪一个表现更好


Edit:SelectedItem.Text已替换为SelectedItem.Value

在DroodDown列表中,有两项添加属性

<asp:Repeater runat="server">
 <ItemTemplate>
     <asp:DropDownList ID="ddlCategories" runat="server" 
                       SelectedValue='<%# Eval("CategoryId")%>'>
     </asp:DropDownList>
 </ItemTemplate>
</asp:Repeater>
1) 正文 2) 价值观

如果要获取文本属性,请使用selecteditem.text

如果要选择value属性,请使用selectedvalue属性

在您的例子中,value和text属性都是相同的,所以无论您使用selectedvalue还是selecteditem.text


如果两者都不同,那么它们会给我们不同的结果

它们都不同
SelectedValue
属性提供所选项目的实际值,而
SelectedItem.Text
提供显示文本。例如:您下拉列表可能有一个类似itme的

<asp:ListItem Text="German" Value="de"></asp:ListItem>

因此,在这种情况下,
SelectedValue
将是
de
,而
SelectedItem.Text
将给出“德语”

编辑:

在那种情况下,它们都是一样的。。。原因
SelectedValue
将在下拉列表中为当前选定项目提供存储的值,而
SelectedItem.value
将为当前选定项目的值


因此,它们都会给出相同的结果。

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>
SelectedItem看起来像这样:

public virtual ListItem SelectedItem
{
    get
    {
        int selectedIndex = this.SelectedIndex;
        if (selectedIndex >= 0)
        {
            return this.Items[selectedIndex];
        }
        return null;
    }
}
这两个属性之间的一个主要区别是
SelectedValue
也有一个setter,因为
SelectedItem
没有。编写代码时,
SelectedValue
的获取速度更快,执行性能问题没有真正的理由讨论。SelectedValue的另一大优势是在使用绑定表达式时

编辑数据绑定方案(不能使用SelectedItem.Value)



两者之间的一个重要区别(在反映的代码中可见)是,如果选择了nothing,SelectedValue将返回空字符串,而SelectedItem.Value将抛出NullReference异常。

使用SelectedItem.Text时要小心。。。 如果未选择任何项目,则SelectedItem将为空,SelectedItem.Text将生成空值异常


.NET应该提供一个SelectedText属性,如SelectedValue属性,当没有选定项时返回String.Empty。

感谢您指出我的观点。。我打错了。文本。。事实上,价值无处不在。那么,这两个属性(SelectedItem.Value和SelectedValue)的内部实现是相同的吗?SelectedItem(两点)语法不是比一跳之外的SelectedValue更复杂吗?谢谢Adrian。你能详细介绍一下绑定表达式的优点吗?非常感谢@vulcanraven,欢迎,我用一个数据绑定示例更新了答案我不确定你的“引擎盖下”部分是否正确。我刚刚发现,
SelectedItem
将根据其值而不是索引返回所选项目。这意味着如果有多个项目具有相同的
,则可能
SelectedItem
返回了错误的项目。我使用Reflector查看了它。此注释令人困惑。是的,selectedValue属性和selectedItem。文本可以相同,但通常情况下,它们与上面的示例不同,其中selectedValue为“de”,selectedItem为“德语”,或者selectedValue为“CA”,selectedItem为“California”。最常见的是,SelectedValue是DB主索引值和SelectedItem的字符串表示形式。Text是DB表中同一行的特定列中的值。
<asp:Repeater runat="server">
 <ItemTemplate>
     <asp:DropDownList ID="ddlCategories" runat="server" 
                       SelectedValue='<%# Eval("CategoryId")%>'>
     </asp:DropDownList>
 </ItemTemplate>
</asp:Repeater>