2012-03-05 10 views
34

Eski bir proje üzerinde çalışıyorum ve yıllar sonra birkaç kişi tarafından yamalı. Bazı yerlerde SelectedValue özelliğini ve SelectedItem.Value kullandıkları diğer yerleri kullandılar.SelectedValue vs SelectedItem.Value of DropDownList

Soru:SelectedValue başlık altında farklı SelectedItem.Value veya SelectedValue işleri için sadece bir sözdizimsel şeker mi? Hangisi daha iyi performans gösterir?

Düzenleme: SelectedItem.Text iki madde özelliği eklemek vardır droupDown listesinde SelectedItem.Value

cevap

46

SelectedValue10, SelectedItem.Value ile aynı değeri döndürür.

SelectedItem.Value ve SelectedItem.Text farklı değerlere sahip olabilir ve performans burada bir faktör değildir, yalnızca bu özelliklerin anlamları önemlidir.

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

, ddlUserTypes.SelectedItem.Value == ddlUserTypes.SelectedValue ve her iki değeri "1" döndürecektir.Kaputun altındaki ddlUserTypes.SelectedValue

düzenlemek

farklıdır

ddlUserTypes.SelectedItem.Text "Yöneticiler" döneceğini, SelectedValue bu

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

benziyor ve SelectedItem şuna benzer:

public virtual ListItem SelectedItem 
{ 
    get 
    { 
     int selectedIndex = this.SelectedIndex; 
     if (selectedIndex >= 0) 
     { 
      return this.Items[selectedIndex]; 
     } 
     return null; 
    } 
} 
bu iki özellik arasındaki

Bir önemli fark SelectedItem değil çünkü SelectedValue, aynı zamanda bir ayarlayıcı olmasıdır. Kod yazmadan ve yürütme performansının sorunu tartışılacak için gerçek bir neden olduğunda alıcı SelectedValue arasında hızlıdır. Ayrıca, Bağlama ifadeleri kullanıldığında SelectedValue'nin büyük bir avantajıdır.

düzenlemek (eğer SelectedItem.Value kullanamazsınız) senaryo bağlayıcı veri

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

Teşekkür koymak .. aslında .Value her yerde kullanılıyor. Yani, her iki özelliğin iç uygulaması (SelectedItem.Value & SelectedValue) aynı mıdır? SelectedItem (iki nokta) sözdizimi, tek-hop-away SelectedValue ile karşılaştırıldığında daha karmaşık değil mi? –

+0

Teşekkür ederim Adrian. Binding ifadeleri avantajı hakkında ayrıntılı bilgi verir misiniz? Çok mecbur olurdu! –

+0

@vulcanraven, hoş geldiniz, cevabı güncellenmiş bir örnekle güncelledim –

0

ile değiştirildi.

1) Metin 2) değeri

u

selecteditem.text kullanmak sonra metin özelliği elde etmek istiyorsanız ve daha sonra ise SelectedValue özelliğini

kullanmak değer özelliği seçin etmek istiyorsanız durumda ben hem değer hem de metin özelliği aynıdır, bu yüzden olursa olsun kullanamazsınız.valxt veya selecteditem.text

Her ikisi de farklıysa, bize farklı sonuçlar verir

+0

Bu yorum, kafa karıştırıcı düzenlemeyi –

+0

kontrol edin. Evet, selectedValue mülkiyet ve selectedItem.Text aynı CAN, ancak ÇOK sıklıkla SelectedValue "de" nerede Yukarıdaki örnekte uyarınca DEĞİLDİR ve SelectedItem.Text "Alman" veya SelectedValue "CA" ve SelectedItem.Text "Kaliforniya olduğunu ". En yaygın olarak, SelectedValue bir DB birincil dizin değerinin dize olarak temsilidir ve SelectedItem.Text bir DB tablosundaki aynı satır için belirli bir sütundaki değerdir. edit edin –

3

Her ikisi de farklıdır. SelectedValue özelliği, seçim öğesinin gerçek değerini verirken, SelectedItem.Text görüntü metnini verir. Örneğin:

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

gibi bir itme olabilir açılır Yani, bu durumda SelectedValuede ve SelectedItem.Text 'Alman' verecekti olurdu

DÜZENLEME: Bu durumda

, ikisi de aynıdır ... Neden SelectedValue size açılan menüde geçerli seçilmiş öğe için saklanan değeri verecektir ve SelectedItem.Value o anda seçili öğenin Değeri olacaktır.

Böylece ikisi de aynı sonucu verecektir.

+0

.. ben yanlışlıkla .. ben yanlışlıkla yazılan .text beni işaret için .text –

7

arasında önemli bir ayrım (Yansıyan kodda görünür) SelectedValue boş bir dize döndürür olmasıdır iki Hiçbir şey seçilmezse, SelectedItem.Value bir NullReference istisnası atar.

0

SelectedItem.Text ... kullanırken dikkatli olun Seçilen bir öğe yoksa, SelectedItem boş olacak ve SelectedItem.Text boş değer istisnası oluşturacaktır.

NET hiçbir Seçili öğe olduğunda String.Empty döndüren SelectedValue özelliği gibi bir SelectedText özelliğini sağlamış olmalıdır.