Проблема состояния просмотра при выборе первого элемента выпадающего списка

#asp.net #drop-down-menu #viewstate #selectedindexchanged

#asp.net #выпадающее меню #состояние просмотра #selectedindexchanged

Вопрос:

В моем ASP.NET веб-сайт 4.0, который использует основные страницы, я отключил viewstate по всему сайту в web.config:

 <pages enableViewState="false" />
  

и я пытаюсь включить его только тогда, когда это абсолютно необходимо.

Я столкнулся с проблемой с элементом управления выпадающего списка (привязка к данным не выполняется, только жестко закодированные элементы):

     <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" onselectedindexchanged="DropDownList1_SelectedIndexChanged" Width="150px" ViewStateMode="Enabled" EnableViewState="True">
        <asp:ListItem>Chocolate</asp:ListItem>
        <asp:ListItem>Strawberry</asp:ListItem>
        <asp:ListItem>Vanilla</asp:ListItem>
    </asp:DropDownList>
  

Несмотря на то, что я включил состояние просмотра для этого конкретного элемента управления, существует проблема с выбором первого элемента:

введите описание изображения здесь

     protected void DropDownList1_SelectedIndexChanged (object sender, EventArgs e)
    {
        TextBox1.Text = (sender as DropDownList).SelectedValue;
    }
  

Ожидаемый результат заключается в том, что всякий раз, когда выбрано «Шоколад», в TextBox1 будет отображаться «Шоколад». Но я вижу, что TextBox1 изменяется только при выборе Strawberry или Vanilla. В приведенном выше примере я выбрал клубнику, а затем шоколад.

Другими словами, выпадающий список SelectedIndexChanged не запускается при выборе первого элемента, но запускается при выборе второго или третьего.

Вот настройки свойств для выпадающего списка:

введите описание изображения здесь

Я попробовал тот же код, начиная с пустого проекта, и страница работает так, как ожидалось. (Выбор первого элемента запускает событие).

Заранее спасибо за любые предложения.

Комментарии:

1. ИТАК, если вы выберете второй элемент. Событие запущено. Если вы затем выберете первый элемент, событие не будет запущено?

2. @Phil: Да, событие SelectedIndexChanged срабатывает при выборе второго или третьего элементов. Но после этого выбор первого элемента не приводит к запуску события.

Ответ №1:

Похоже, вы не можете настроить <pages enableViewState="false" /> в web.config или в каких-либо директив страницы для ViewStateMode свойства для работы.

В принципе, EnableViewState=false это переопределит все ViewStateMode настройки.

На данный момент, похоже, не существует способа установить ViewStateMode свойство в web.config, поэтому, похоже, вам придется удалить какие-либо EnableViewState свойства из вашего приложения и установить для ViewStateMode свойства значение Disabled во всех ваших директивах page.

Ответ №2:

Я думаю, я знаю, что вы говорите. Вы хотите показывать значение по умолчанию из выпадающего списка при загрузке страницы. Если вы хотите, вы можете сделать это при загрузке выпадающего списка.

 protected void DropDownList1_Load(object sender, EventArgs e)
    {
        TextBox1.Text = (sender as DropDownList).Text;
    }
  

Комментарии:

1. Извините. Я все испортил. Вы не хотите этого делать. Я не воспроизвел это.