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
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>
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.
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.
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
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é.