2012-03-05 14 views
34

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.SelectedValue vs SelectedItem.Value of DropDownList

Pregunta: ¿EsSelectedValue sólo un azúcar sintáctico para SelectedItem.Value o SelectedValue funciona de forma diferente bajo el capó? ¿Cuál se comporta mejor?

Editar: SelectedItem.Text fue sustituido por SelectedItem.Value

Respuesta

46

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> 
+0

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? –

+0

Gracias Adrian. ¿Puedes detallar sobre la ventaja de las expresiones vinculantes? Estaría muy agradecido! –

+0

@vulcanraven, bienvenido, actualicé la respuesta con un ejemplo de enlace de datos –

0

En la lista hay dos droupDown elemento Agregar propiedad.

1) Texto 2) Valor

Si desea obtener la propiedad de texto a continuación, el uso de u selecteditem.text

y Si desea seleccionar la propiedad valor a continuación, utilizar la propiedad SelectedValue

En su caso que tanto el valor como la propiedad de texto son los mismos, no importa si usa selectedvalue o selecteditem.text

Si ambos son diferentes, nos dan resultados diferentes

+0

Compruebe la edición –

+0

Este comentario es confuso. Sí, la propiedad selectedValue y selectedItem.Text PUEDEN ser las mismas, pero MUY frecuentemente NO son como en el ejemplo anterior donde SelectedValue es "de" y SelectedItem.Text es "German" o SelectedValue es "CA" y SelectedItem.Text es "California ". Más comúnmente, SelectedValue es la representación de cadena de un valor de índice primario DB y SelectedItem. Text es el valor de una columna específica para la misma fila en una tabla DB. –

3

Ambos son diferentes. La propiedad SelectedValue le proporciona el valor real del artículo en la selección, mientras que SelectedItem.Text le proporciona el texto de la pantalla. Por ejemplo: usted desplegable puede tener un quedará grabado como

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

Por lo tanto, en este caso SelectedValue habría de y SelectedItem.Text daría 'alemán'

EDIT:

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.

Así que ambos le darán el mismo resultado.

+0

Comprueba la edición ... equivocadamente puse .Text –

7

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.

0

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 de texto seleccionado como la propiedad SelectedValue que devuelve String.Empty cuando no hay un elemento seleccionado.

Cuestiones relacionadas