SelectedValue
は、SelectedItem.Value
と同じ値を返します。
SelectedItem.Value
とSelectedItem.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
にはセッターも含まれています。 getterがSelectedValue
の場合、コードを記述する方が高速であり、実行パフォーマンスの問題は議論の余地がありません。 SelectedValueの大きな利点は、Binding式を使用する場合です。
編集(あなたがSelectedItem.Valueを使用することはできません)シナリオを結合データ
<asp:Repeater runat="server">
<ItemTemplate>
<asp:DropDownList ID="ddlCategories" runat="server"
SelectedValue='<%# Eval("CategoryId")'>
</asp:DropDownList>
</ItemTemplate>
</asp:Repeater>
私を指摘してくれてありがとう。私は誤って.Text ..実際に入力しました。値はどこでも使用されています。したがって、両方のプロパティ(SelectedItem.ValueとSelectedValue)の内部実装は同じですか? 1ホップ離れたSelectedValueに比べて、SelectedItem(2ドット)の構文が複雑ですか? –
アドリアンありがとうございます。 Binding表現の利点について詳しく説明できますか?非常に義務づけられるだろう! –
@vulcanraven、ようこそ、私はデータバインディングの例で答えを更新しました –