asp.net - mvc - dropdownlist set selected value c#
SelectedValue vs SelectedItem.Value of DropDownList (5)
Estoy trabajando en un proyecto antiguo escrito y luego parcheado por varias personas a lo largo de los años. En algunos lugares, han utilizado la propiedad SelectedValue y otros lugares en los que han utilizado SelectedItem.Value.
Pregunta: ¿ SelectedValue
es solo un azúcar sintáctico para SelectedItem.Value
o SelectedValue
funciona de manera diferente bajo el capó? ¿Cuál se comporta mejor?
Editar: SelectedItem.Text fue reemplazado por SelectedItem.Value
Ambos son diferentes. SelectedValue
propiedad SelectedValue
le proporciona el valor real del elemento en la selección, mientras que SelectedItem.Text
le proporciona el texto de la pantalla. Por ejemplo: tu menú desplegable puede tener un estilo como
<asp:ListItem Text="German" Value="de"></asp:ListItem>
Entonces, en este caso SelectedValue
sería de
y SelectedItem.Text
daría ''German''
EDITAR:
En ese caso, ambos son los mismos ... Causa SelectedValue
le dará el valor almacenado para el elemento seleccionado actual en su menú desplegable y SelectedItem.Value
será el valor del elemento seleccionado actualmente.
Entonces ambos le darían el mismo resultado.
En la lista droupdown, hay dos elementos agregar propiedad.
1) Texto 2) valor
Si quieres obtener una propiedad de texto, entonces usa selecteditem.text
y Si desea seleccionar una propiedad de valor, utilice la propiedad de valor seleccionado
En su caso, considero que tanto el valor como la propiedad del texto son los mismos, así que no importa si usa selectedvalue o selecteditem.text
Si ambos son diferentes, entonces nos dan resultados diferentes
Tenga cuidado al utilizar SelectedItem.Text ... Si no hay ningún elemento seleccionado, entonces SelectedItem será nulo y SelectedItem.Text generará una excepción de valor nulo.
.NET debería haber proporcionado una propiedad SelectedText como la propiedad SelectedValue que devuelve String.Empty cuando no hay ningún elemento seleccionado.
Una distinción importante entre los dos (que es visible en el código Reflejado) es que SelectedValue devolverá una cadena vacía si no se selecciona nada, mientras que SelectedItem.Value lanzará una excepción NullReference.
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 devolverían el valor "1".
ddlUserTypes.SelectedItem.Text
devolverá "Admins", que es diferente de ddlUserTypes.SelectedValue
editar
debajo del 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 ve así:
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 SelectedValue
tiene un setter , ya que SelectedItem
no lo hace. El captador 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.
editar escenario de enlace de datos (no puede usar SelectedItem.Value)
<asp:Repeater runat="server">
<ItemTemplate>
<asp:DropDownList ID="ddlCategories" runat="server"
SelectedValue=''<%# Eval("CategoryId")''>
</asp:DropDownList>
</ItemTemplate>
</asp:Repeater>