web-dev-qa-db-ja.com

SelectedValueとDropDownListのSelectedItem.Value

私は古いプロジェクトに取り組んでおり、長年にわたって何人かの人々がパッチを適用しています。一部の場所ではSelectedValueプロパティを使用しており、他の場所ではSelectedItem.Valueを使用しています。

質問: Is SelectedValueは単なるsyntactic sugarSelectedItem.ValueまたはSelectedValueの動作フードの下で異なる?どちらが優れたパフォーマンスを発揮しますか?

編集: SelectedItem.TextはSelectedItem.Valueに置き換えられました

38
vulcan raven

SelectedValueは、SelectedItem.Valueと同じ値を返します。

SelectedItem.ValueSelectedItem.Textの値は異なる場合があり、パフォーマンスはここでは要因ではなく、これらのプロパティの意味のみが重要です。

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

ここでは、ddlUserTypes.SelectedItem.Value == ddlUserTypes.SelectedValueと両方が値「1」を返します。

ddlUserTypes.SelectedItem.Textは「Admins」を返しますが、これはddlUserTypes.SelectedValueとは異なります

編集

フードの下では、SelectedValueは次のようになります

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

selectedItemは次のようになります。

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

これら2つのプロパティの大きな違いの1つは、SelectedValueにはないので、SelectedItemにもsetterがあることです。 SelectedValuegetterは、コードを記述する際により高速であり、実行パフォーマンスの問題について議論する本当の理由はありません。また、SelectedValueの大きな利点は、バインディング式を使用する場合です。

編集データバインディングシナリオ(SelectedItem.Valueは使用できません)

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

2つの重要な違い(Reflectedコードに表示)は、SelectedValueは何も選択されていない場合に空の文字列を返しますが、SelectedItem.ValueはNullReference例外をスローすることです。

7
Joshua Barker

両方とも異なります。 SelectedValueプロパティは選択中のアイテムの実際の値を提供しますが、SelectedItem.Textは表示テキストを提供します。たとえば、ドロップダウンには次のようなアイテムがあります

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

したがって、この場合、SelectedValuedeになり、SelectedItem.Textは 'German'になります

編集:

その場合、それらは両方とも同じです...原因SelectedValueは、ドロップダウンで現在選択されているアイテムに保存されている値を提供し、SelectedItem.Valueは現在選択されているアイテムの値になります。

したがって、どちらも同じ結果をもたらします。

4
Rahul

DroupDownリストには、2つのアイテム追加プロパティがあります。

1)テキスト2)値

テキストプロパティを取得する場合は、selecteditem.textを使用します。

値プロパティを選択する場合は、selectedvalueプロパティを使用します

あなたの場合、私は値とテキストプロパティの両方が同じであるため、uがselectedvalueまたはselecteditem.textを使用するかどうかは関係ありません

両方が異なる場合、異なる結果が得られます

0
V_B

SelectedItem.Textの使用に注意してください...アイテムが選択されていない場合、SelectedItemはnullになり、SelectedItem.Textはnull値の例外を生成します。

.NETは、選択された項目がないときにString.Emptyを返すSelectedValueプロパティのようなSelectedTextプロパティを提供する必要がありました。

0
Bruce Allen