EnableViewState не работает в DropDownList

Страница default.aspx имеет DropDownList который заполняется в коде только тогда, когда это не postback, Когда выбрано значение, вызывается метод, который заполняет Literal с выбранным значением. Работает как положено. Проблема в том, когда я устанавливаю страницу не EnableViewState включив его в DropDownList только контроль В этом случае, когда отправил обратно DropDownList теряет свои предметы. Я настроил новый веб-проект, чтобы проверить это. Там нет главной страницы, чтобы сделать это проще.

Default.aspx:

<%@ Page Title="Home Page" Language="C#" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="WebApplication4._Default" 
    EnableViewState="false" %>

<asp:DropDownList ID="DDL" runat="server" 
    OnSelectedIndexChanged="DDL_OSIC" 
    AutoPostBack="true" 
    EnableViewState="true">
</asp:DropDownList>

<asp:Literal ID="Literal1" runat="server"></asp:Literal>

Default.aspx.cs:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        DDL.Items.Add("red");
        DDL.Items.Add("green");
        DDL.Items.Add("blue");
    }
}
protected void DDL_OSIC(object sender, EventArgs e)
{
    Literal1.Text = DDL.SelectedValue;
}

Почему не работает EnableViewState?

2 ответа

Решение

Нашел ответ с помощью удаленного ответа. Удаленный ответ был неправильным только потому, что он был неполным. С этой подсказкой я нашел страницу свойств ViewStateMode.

Подводя итог, нужно отключить ViewState всех элементов управления и включить его только для выбранных:

  • Установите и страницу, и все элементы управления EnableViewState собственность на true, Это по умолчанию, поэтому не нужно ничего писать
  • Установить страницу ViewStateMode в Disabled
  • Задавать ViewStateMode в Enabled в элементе управления, где вы хотите включить ViewState

На моем компьютере я создаю веб-приложение. Результат такой же, как и у вас. Я предполагаю, что когда viewstate страницы ложно,control viewstate не может работать.

Другие вопросы по тегам