2012-03-05 11 views
34

私は古いプロジェクトに取り組んでおり、何年も前から何人かの人が書いて、パッチを当てています。 SelectedValueプロパティとSelectedItem.Valueを使用した他の場所を使用している場所もあります。SelectedValueとDropDownListのSelectedItem.Value

質問:SelectedValueフードの下、異なるSelectedItem.ValueまたはSelectedValue作品のためだけ糖衣構文ですか?どちらが良いですか?

編集: SelectedItem.Textは2つの項目がプロパティを追加があるdroupDownリストでSelectedItem.Value

答えて

46

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

編集

異なる

ddlUserTypes.SelectedItem.Text "管理者" を返しますが、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にはセッターも含まれています。 getterSelectedValueの場合、コードを記述する方が高速であり、実行パフォーマンスの問題は議論の余地がありません。 SelectedValueの大きな利点は、Binding式を使用する場合です。

編集(あなたがSelectedItem.Valueを使用することはできません)シナリオを結合データ

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

私を指摘してくれてありがとう。私は誤って.Text ..実際に入力しました。値はどこでも使用されています。したがって、両方のプロパティ(SelectedItem.ValueとSelectedValue)の内部実装は同じですか? 1ホップ離れたSelectedValueに比べて、SelectedItem(2ドット)の構文が複雑ですか? –

+0

アドリアンありがとうございます。 Binding表現の利点について詳しく説明できますか?非常に義務づけられるだろう! –

+0

@vulcanraven、ようこそ、私はデータバインディングの例で答えを更新しました –

0

と交換しました。

1)テキスト 2)値

textプロパティを取得したい場合は、uは

selecteditem.text使用して、値のプロパティを選択したい場合は、あなたでは

SelectedValueのプロパティを使用します場合は私のもの両方の値とテキストのプロパティは、同じように使用されても、選択された値またはselecteditem.textを使用する

両方が異なる場合、私たちは異なる結果を与える

+0

編集を確認してください –

+0

このコメントは紛らわしいものです。はい、selectedValueプロパティとselectedItem.Textは同じですが、SelectedValueが "de"でSelectedItem.Textが "German"であるかSelectedValueが "CA"でSelectedItem.Textが "California"である場合、 "最も一般的には、SelectedValueはDBプライマリインデックス値の文字列表現であり、SelectedItem.TextはDBテーブル内の同じ行の特定の列からの値です。 –

3

どちらも同じです。 SelectedValueプロパティは選択項目の実際の値を示し、SelectedItem.Textは表示テキストを示します。 、その場合には

:たとえば: 'ドイツ'

EDITを与えるだろう、あなたはドロップダウンので

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

のようなITMEを有していてもよく、この場合にはSelectedValuedeSelectedItem.Textだろう彼らは両方とも同じです...原因SelectedValueは、ドロップダウンで現在選択されている項目に格納されている値を返し、SelectedItem.Valueは現在選択されている項目の値になります。

だから、どちらも同じ結果をもたらすでしょう。

+0

編集を確認します。私は間違って.Textを入れます –

7

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

0

SelectedItem.Text ... が選択されていない場合、SelectedItemはnullになり、SelectedItem.Textはnull値の例外を生成します。

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

関連する問題