web-dev-qa-db-fra.com

SelectedValue vs SelectedItem.Value de DropDownList

Je travaille sur un vieux projet écrit puis corrigé par plusieurs personnes au fil des ans. À certains endroits, ils ont utilisé la propriété SelectedValue et d’autres, ils ont utilisé SelectedItem.Value.

Question: SelectedValue est-il juste un sucre syntaxique pour SelectedItem.Value ou SelectedValue fonctionne différemment sous le capot? Lequel fonctionne mieux?

Modifier: SelectedItem.Text a été remplacé par SelectedItem.Value

37
vulcan raven

SelectedValue renvoie la même valeur que SelectedItem.Value.

SelectedItem.Value et SelectedItem.Text peuvent avoir des valeurs différentes et les performances ne sont pas un facteur ici, seule la signification de ces propriétés est importante.

<asp:DropDownList runat="server" ID="ddlUserTypes">
    <asp:ListItem Text="Admins" Value="1" Selected="true" />
    <asp:ListItem Text="Users" Value="2"/>
</asp:DropDownList>

Ici, ddlUserTypes.SelectedItem.Value == ddlUserTypes.SelectedValue et les deux renverraient la valeur "1".

ddlUserTypes.SelectedItem.Text renverrait "Admins", ce qui est différent de ddlUserTypes.SelectedValue 

modifier

sous le capot, SelectedValue ressemble à ceci

public virtual string SelectedValue
{
    get
    {
        int selectedIndex = this.SelectedIndex;
        if (selectedIndex >= 0)
        {
            return this.Items[selectedIndex].Value;
        }
        return string.Empty;
    }
}

et SelectedItem ressemble à ceci:

public virtual ListItem SelectedItem
{
    get
    {
        int selectedIndex = this.SelectedIndex;
        if (selectedIndex >= 0)
        {
            return this.Items[selectedIndex];
        }
        return null;
    }
}

Une différence majeure entre ces deux propriétés est que la SelectedValue a également un setter, puisque SelectedItem n'en a pas. Le getter de SelectedValue est plus rapide lors de l'écriture de code et le problème de performances d'exécution n'a pas de raison d'être réellement discuté. Un autre grand avantage de SelectedValue est l'utilisation d'expressions de liaison.

edit scénario de liaison de données (vous ne pouvez pas utiliser SelectedItem.Value)

<asp:Repeater runat="server">
 <ItemTemplate>
     <asp:DropDownList ID="ddlCategories" runat="server" 
                       SelectedValue='<%# Eval("CategoryId")'>
     </asp:DropDownList>
 </ItemTemplate>
</asp:Repeater>
53
Adrian Iftode

Une distinction importante entre les deux (visible dans le code Reflected) est que SelectedValue renverra une chaîne vide si aucun élément n'est sélectionné, alors que SelectedItem.Value lève une exception NullReference.

7
Joshua Barker

Ils sont tous deux différents. La propriété SelectedValue vous donne la valeur réelle de l'élément en sélection, alors que SelectedItem.Text vous donne le texte à afficher. Par exemple: votre liste déroulante peut avoir un nom comme

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

Donc, dans ce cas, SelectedValue serait de et SelectedItem.Text donnerait 'Allemand'

MODIFIER:

Dans ce cas, ils sont identiques ... Cause SelectedValue vous donnera la valeur stockée pour l'élément actuellement sélectionné dans votre liste déroulante et SelectedItem.Value sera Valeur de l'élément sélectionné.

Donc, ils vous donneraient le même résultat.

3
Rahul

Dans la liste droupDown, il existe deux propriétés d’ajout d’éléments.

1) Texte 2) valeur

Si vous voulez obtenir la propriété text alors utilisez u selectitem.text

et Si vous voulez sélectionner la propriété value, utilisez la propriété selectedvalue

Dans votre cas, les valeurs et les propriétés du texte sont les mêmes, peu importe si vous utilisez selectedvalue ou selecteditem.text 

Si les deux sont différents, ils nous donnent des résultats différents 

0
V_B

Faites attention en utilisant SelectedItem.Text ... Si aucun élément n'est sélectionné, SelectedItem sera null et SelectedItem.Text générera une exception de valeur nulle.

.NET aurait dû fournir une propriété SelectedText, telle que la propriété SelectedValue, qui renvoie String.Empty en l'absence d'élément sélectionné.

0
Bruce Allen