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

Question:SelectedValue只是SelectedItem.Valuesyntactic sugar还是SelectedValue在引擎盖下的工作方式不同?哪一个表现更好?

Edit:个 Select 编辑.文本被SelectedItem替换.价值

推荐答案

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将返回"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>

Asp.net相关问答推荐

IIS重写模块排除机器人但允许GoogleBot

无法为媒体类型application/x-www-form-urlencoded生成样本

.Net Framework:w3wp.exe 中的异常

在 appSettings 中存储字符串数组?

使用会话变量有多安全 - asp.net / c#

无法让嵌套在 UpdatePanel 中的 WebControl 中的 ScriptManager.RegisterStartupScript 工作

不支持关键字:服务器

部署后网站需要强制刷新

从 C# AsyncCTP 使用 ExecuteReaderAsync 的任何缺点

HttpContext.Current.Cache.Insert 和 HttpContext.Current.Cache.Add 有什么区别

asp.net Button OnClick 事件未触发

ASP.NET vNext 与主机无关,这意味着什么?

带有完整内存错误的 WCF 服务(内存门判断失败,因为可用内存) - 如何解决

asp.net 有控制台日志(log)吗?

如何从后面的 ASP.NET 代码访问 HTML 表单输入

.NET 4.0 中的自定义 MembershipProvider

使用 ConfigurationManager.RefreshSection 重新加载配置而不重新启动应用程序

在.net的内存数据库中

在 Visual Studio 2013 中更改项目端口号

.Net 上是否有 URL 验证器?