#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. Извините. Я все испортил. Вы не хотите этого делать. Я не воспроизвел это.