2012-03-05 2 views
34

Я работаю над старым проектом, написанным, а затем исправленным несколькими людьми на протяжении многих лет. В некоторых местах они использовали свойство SelectedValue и другие места, в которых они использовали SelectedItem.Value.SelectedValue vs SelectedItem.Value of DropDownList

Вопрос: Является лиSelectedValue просто синтаксический сахар для SelectedItem.Value или SelectedValue работает по-разному под капотом? Какой из них лучше работает?

Edit: SelectedItem.Text был заменен SelectedItem.Value

ответ

46

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.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 заключается в использовании выражений 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) одинакова? Не выбран ли синтаксис SelectedItem (два точки) более сложным по сравнению с выбранным вами одним-ходом SelectedValue? –

+0

Спасибо, Адриан. Можете ли вы подробно рассказать о преимуществах выражения Binding? Был бы очень обязан! –

+0

@vulcanraven, добро пожаловать, я обновил ответ с примером привязки данных –

0

В списке droupDown есть два пункта добавить свойство.

1) Текст 2) значение

Если вы хотите, чтобы получить свойство текста, то и использовать selecteditem.text

и если вы хотите, чтобы выбрать значение свойства, то используйте свойство SelectedValue

В вашей case i вещь как значение, так и свойство текста одинаковы, так что независимо от того, u вы используете 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 дает вам текст на дисплее. Например: вы падаете вниз может иметь Itme как

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

Таким образом, в этом случае SelectedValue бы de и SelectedItem.Text бы дать «немецкий»

EDIT:

В этом случае, они оба одинаковы ... Причина SelectedValue даст вам значение, сохраненное для текущего выбранного элемента в раскрывающемся списке, а SelectedItem.Value будет значением выбранного элемента.

Таким образом, они оба дадут вам тот же результат.

+0

Отредактируйте .. Я ошибочно положил .Text –

7

Одно важное различие между двумя (который виден в отраженном кода) является то, что SelectedValue возвращает пустую строку если ничего не выбрано, тогда как SelectedItem.Value выдаст исключение NullReference.

0

Будьте осторожны с использованием SelectedItem.Text ... Если элемент не выбран, то SelectedItem будет null и SelectedItem.Text будет генерировать исключение с нулевым значением.

.NET должен предоставить свойство SelectedText, такое как свойство SelectedValue, которое возвращает String.Empty, когда нет выбранного элемента.