2012-03-05 145 views
34

我正在編寫一箇舊項目,然後多年來由幾個人修補。在某些地方,他們使用了SelectedValue屬性以及他們使用SelectedItem.Value的其他地方。DropDownList的SelectedValue與SelectedItem.Value

問:SelectedValue只爲SelectedItem.ValueSelectedValue原理不同引擎蓋下語法糖?哪一個表現更好?

編輯: SelectedItem.Text與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.SelectedItem.Text將返回 「管理員」,這是從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; 
    } 
} 

這兩個屬性之間的一個主要區別是SelectedValue也有一個設置器也因爲SelectedItem沒有。 SelectedValue獲得者SelectedValue在編寫代碼時速度更快,並且執行性能的問題沒有真正的理由被討論。使用綁定表達式時,SelectedValue的一大優點也是。

編輯數據綁定方案(不能使用SelectedItem.Value)

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

感謝您指出我..我錯誤地鍵入.Text ..其實.Value正在使用到處。那麼,兩個屬性(SelectedItem.Value和SelectedValue)的內部實現是相同的?與單跳離開的SelectedValue相比,SelectedItem(兩點)語法不是更復雜嗎? –

+0

謝謝阿德里安。你能詳細瞭解綁定表達式的優點嗎?會非常感激! –

+0

@vulcanraven,歡迎,我用數據綁定示例更新了答案 –

0

在droupDown列表取代有兩個項目添加屬性。

1)文本 2)值

如果你想獲得文本屬性然後u使用selecteditem.text

,如果你想選擇value屬性,然後使用SelectedValue屬性

在你案件我的事情的價值和文字財產都是一樣的,所以無論如果你使用selectedvalue或selecteditem.text

如果兩個不同,那麼他們給我們不同的結果

+0

請檢查編輯 –

+0

這個評論很混亂。是的,selectedValue屬性和selectedItem.Text可以是相同的,但很經常他們不像上面的例子,其中SelectedValue是「de」,SelectedItem.Text是「German」或SelectedValue是「CA」,而SelectedItem.Text是「California 」。通常,SelectedValue是數據庫主索引值的字符串表示形式,SelectedItem.Text是來自數據庫表中同一行的特定列的值。 –

3

它們都不同。 SelectedValue屬性爲您提供了所選項目的實際值,而SelectedItem.Text爲您提供了顯示文本。例如:你下拉可能有像

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

的紡織機械展覽會所以,在這種情況下SelectedValuedeSelectedItem.Text會給「德國」

編輯:

在這種情況下,他們都是一樣的...原因SelectedValue會給你在下拉列表中當前選定項目存儲的值,並且SelectedItem.Value將是當前選定項目的值。

所以他們都會給你同樣的結果。

+0

檢查編輯..我錯誤地放.Text –

7

之間的一個重要區別兩個(這是可見的反射碼)是的SelectedValue將返回一個空字符串如果沒有選擇任何內容,而SelectedItem.Value將拋出一個NullReference異常。

0

小心使用SelectedItem.Text ... 如果沒有選擇的項目,那麼SelectedItem將爲空,並且SelectedItem.Text將生成一個空值異常。

.NET應該提供SelectedText屬性,如SelectedValue屬性,該屬性在沒有選定項目時返回String.Empty。

相關問題