Подтвердить что ты не робот

SelectedValue vs SelectedItem.Value DropDownList

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

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

Изменить: SelectedItem.Text был заменен на SelectedItem.Value

4b9b3361

Ответ 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, когда нет выбранного элемента.