vul*_*ven 40 .net asp.net drop-down-menu
我正在编写一个旧项目,然后多年来由几个人修补.在某些地方,他们使用了SelectedValue属性,而其他地方则使用了SelectedItem.Value.
问:是否SelectedValue只是一个语法糖用于SelectedItem.Value或SelectedValue引擎盖下的工作方式不同?哪一个表现更好?
编辑: SelectedItem.Text替换为SelectedItem.Value
Adr*_*ode 58
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>
Run Code Online (Sandbox Code Playgroud)
在这里,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;
}
}
Run Code Online (Sandbox Code Playgroud)
和SelectedItem看起来像这样:
public virtual ListItem SelectedItem
{
get
{
int selectedIndex = this.SelectedIndex;
if (selectedIndex >= 0)
{
return this.Items[selectedIndex];
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
这两个属性之间的一个主要区别在于它SelectedValue也有一个setter,因为SelectedItem它没有.在吸气的SelectedValue编写代码时,和执行性能的问题必须要讨论没有真正的理由是更快.SelectedValue的一大优点是使用Binding表达式时.
编辑数据绑定方案(不能使用SelectedItem.Value)
<asp:Repeater runat="server">
<ItemTemplate>
<asp:DropDownList ID="ddlCategories" runat="server"
SelectedValue='<%# Eval("CategoryId")%>'>
</asp:DropDownList>
</ItemTemplate>
</asp:Repeater>
Run Code Online (Sandbox Code Playgroud)
两者之间的一个重要区别(在Reflected代码中可见)是如果未选择任何内容,SelectedValue将返回空字符串,而SelectedItem.Value将抛出NullReference异常.
| 归档时间: |
|
| 查看次数: |
212948 次 |
| 最近记录: |