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>
Спасибо, что указал на меня. Я ошибочно набрал .Text .. на самом деле. Значение используется везде. Итак, внутренняя реализация обоих свойств (SelectedItem.Value & SelectedValue) одинакова? Не выбран ли синтаксис SelectedItem (два точки) более сложным по сравнению с выбранным вами одним-ходом SelectedValue? –
Спасибо, Адриан. Можете ли вы подробно рассказать о преимуществах выражения Binding? Был бы очень обязан! –
@vulcanraven, добро пожаловать, я обновил ответ с примером привязки данных –