webentwicklung-frage-antwort-db.com.de

SelectedValue vs. SelectedItem.Value von DropDownList

Ich arbeite an einem alten Projekt, das im Laufe der Jahre von mehreren Leuten geschrieben und dann gepatcht wurde. An einigen Orten haben sie die SelectedValue-Eigenschaft und andere Orte, an denen sie SelectedItem.Value verwendet haben, verwendet.

Frage: Ist SelectedValue nur ein syntaktischer Zucker für SelectedItem.Value oder SelectedValue, funktioniert das unter der Haube anders? Welches ist besser?

Bearbeiten: SelectedItem.Text wurde durch SelectedItem.Value ersetzt

37
vulcan raven

SelectedValue gibt denselben Wert wie SelectedItem.Value zurück.

SelectedItem.Value und SelectedItem.Text können unterschiedliche Werte haben und die Leistung spielt hier keine Rolle, nur die Bedeutung dieser Eigenschaften ist wichtig.

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

Hier würden ddlUserTypes.SelectedItem.Value == ddlUserTypes.SelectedValue und beide den Wert "1" zurückgeben.

ddlUserTypes.SelectedItem.Text würde "Admins" zurückgeben, was sich von ddlUserTypes.SelectedValue unterscheidet. 

bearbeiten

selectedValue sieht unter der Haube so aus

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

und SelectedItem sieht folgendermaßen aus:

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

Ein Hauptunterschied zwischen diesen beiden Eigenschaften besteht darin, dass SelectedValue auch einen setter hat, da SelectedItem dies nicht tut. Der getter von SelectedValue ist beim Schreiben von Code schneller, und das Problem der Ausführungsleistung hat keinen wirklichen Grund zur Diskussion. Ein großer Vorteil von SelectedValue ist auch die Verwendung von Bindungsausdrücken.

edit Datenbindungsszenario (Sie können SelectedItem.Value nicht verwenden)

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

Ein wichtiger Unterschied zwischen den beiden (was im reflektierten Code sichtbar ist) ist, dass SelectedValue eine leere Zeichenfolge zurückgibt, wenn nichts ausgewählt ist, während SelectedItem.Value eine NullReference-Ausnahme auslöst.

7
Joshua Barker

Sie sind beide unterschiedlich. Die SelectedValue-Eigenschaft gibt den tatsächlichen Wert des Elements in der Auswahl an, wohingegen SelectedItem.Text den Anzeigetext anzeigt. Zum Beispiel: Sie haben ein ähnliches Bild

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

In diesem Fall wäre SelectedValuede und SelectedItem.Text würde 'deutsch' geben.

BEARBEITEN:

In diesem Fall sind beide gleich ... Ursache SelectedValue gibt den Wert des aktuell ausgewählten Elements in Ihrer Dropdown-Liste aus, und SelectedItem.Value wird zum Wert des aktuell ausgewählten Elements.

Sie würden also beide dasselbe Ergebnis erzielen.

3
Rahul

In der droupDown-Liste gibt es zwei Elementeigenschaften zum Hinzufügen.

1) Text 2) Wert

Wenn Sie eine Texteigenschaft abrufen möchten, verwenden Sie selecteditem.text

und Wenn Sie die value-Eigenschaft auswählen möchten, verwenden Sie die selectedvalue -Eigenschaft

In Ihrem Fall sind sowohl value als auch text property gleich, unabhängig davon, ob Sie selectedvalue oder selecteditem.text verwenden 

Wenn beide unterschiedlich sind, ergeben sich unterschiedliche Ergebnisse 

0
V_B

Seien Sie vorsichtig bei der Verwendung von SelectedItem.Text ... Wenn kein Element ausgewählt ist, ist SelectedItem null und SelectedItem.Text generiert eine Ausnahme mit dem Wert null.

.NET hätte eine SelectedText-Eigenschaft wie die SelectedValue-Eigenschaft bereitstellen müssen, die String.Empty zurückgibt, wenn kein ausgewähltes Element vorhanden ist.

0
Bruce Allen