SelectedValue
devuelve el mismo valor que SelectedItem.Value
.
SelectedItem.Value
y SelectedItem.Text
pueden tener valores diferentes y el rendimiento no es un factor aquí, solo importa el significado de estas propiedades.
<asp:DropDownList runat="server" ID="ddlUserTypes">
<asp:ListItem Text="Admins" Value="1" Selected="true" />
<asp:ListItem Text="Users" Value="2"/>
</asp:DropDownList>
Aquí, ddlUserTypes.SelectedItem.Value == ddlUserTypes.SelectedValue
y ambos se devolverá el valor "1".
ddlUserTypes.SelectedItem.Text
volvería "Administradores", que es diferente de ddlUserTypes.SelectedValue
edición
bajo el capó, SelectedValue se parece a esto
public virtual string SelectedValue
{
get
{
int selectedIndex = this.SelectedIndex;
if (selectedIndex >= 0)
{
return this.Items[selectedIndex].Value;
}
return string.Empty;
}
}
y SelectedItem se parece a esto:
public virtual ListItem SelectedItem
{
get
{
int selectedIndex = this.SelectedIndex;
if (selectedIndex >= 0)
{
return this.Items[selectedIndex];
}
return null;
}
}
Una diferencia importante entre estas dos propiedades es que el SelectedValue
tiene un setter también, ya que SelectedItem
no. El getter de SelectedValue
es más rápido cuando se escribe código, y el problema del rendimiento de ejecución no tiene un motivo real para ser discutido. También una gran ventaja de SelectedValue es cuando se utilizan expresiones vinculantes.
edición escenario de unión (no se puede utilizar SelectedItem.Value) de datos
<asp:Repeater runat="server">
<ItemTemplate>
<asp:DropDownList ID="ddlCategories" runat="server"
SelectedValue='<%# Eval("CategoryId")'>
</asp:DropDownList>
</ItemTemplate>
</asp:Repeater>
Gracias por indicarme ... Escribí erroneamente .Texto ... en realidad .Valor se usa en todas partes. Entonces, ¿la implementación interna de ambas propiedades (SelectedItem.Value & SelectedValue) es la misma? ¿La sintaxis de SelectedItem (dos puntos) no es más compleja en comparación con SelectedValue de un salto? –
Gracias Adrian. ¿Puedes detallar sobre la ventaja de las expresiones vinculantes? Estaría muy agradecido! –
@vulcanraven, bienvenido, actualicé la respuesta con un ejemplo de enlace de datos –