SelectedValue vs SelectedItem.Value DropDownList
Я работаю над старым проектом, написанным, а затем зашитым несколькими людьми на протяжении многих лет. В некоторых местах они использовали свойство SelectedValue и другие места, в которых они использовали SelectedItem.Value.
Вопрос: Является ли SelectedValue
только синтаксический сахар для SelectedItem.Value
или SelectedValue
работает по-другому под капотом? Какой из них лучше работает?
Изменить: SelectedItem.Text был заменен на SelectedItem.Value
Ответы
Ответ 1
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
будет возвращать "Admins", что отличается от 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>
Ответ 2
Одно важное различие между двумя (которое видно в Reflected code) заключается в том, что SelectedValue вернет пустую строку, если ничего не выбрано, тогда как SelectedItem.Value выдаст исключение NullReference.
Ответ 3
Они оба разные. Свойство SelectedValue
дает вам фактическое значение элемента в выборе, тогда как SelectedItem.Text
дает текст отображения. Например: вы выпадаете, может иметь itme как
<asp:ListItem Text="German" Value="de"></asp:ListItem>
Итак, в этом случае SelectedValue
будет de
, а SelectedItem.Text
даст "немецкий"
EDIT:
В этом случае они оба одинаковы... Причина SelectedValue
даст вам значение, сохраненное для текущего выбранного элемента в раскрывающемся списке, а SelectedItem.Value
будет значением текущего выбранного элемента.
Таким образом, они оба дадут вам тот же результат.
Ответ 4
В списке droupDown есть два свойства add item.
1) Текст
2) значение
Если вы хотите получить текстовое свойство, то u используйте selecteditem.text
и если вы хотите выбрать свойство value, используйте свойство selectedvalue
В вашем случае я вещь как свойство value, так и text одинаковы, поэтому независимо от того, используете ли вы значение selectedvalue или selecteditem.text
Если оба они разные, то они дают нам разные результаты
Ответ 5
Будьте осторожны с помощью SelectedItem.Text...
Если элемент не выбран, то SelectedItem будет иметь значение null и SelectedItem.Text генерирует исключение с нулевым значением.
.NET должен был предоставить свойство SelectedText, такое как свойство SelectedValue, которое возвращает String.Empty, когда нет выбранного элемента.