EnableViewState在DropDownList中不起作用

时间:2012-08-02 22:54:35

标签: asp.net

default.aspx页面有一个DropDownList,只有当它不是postback时才会填充在代码后面。选择值时,将调用一个方法,该方法使用所选值填充Literal。它按预期工作。问题是当我将页面设置为EnableViewState仅在DropDownList控件中启用它时。在这种情况下,当回发时,DropDownList会丢失其项目。我已经设置了一个新的Web项目来测试它。没有母版页可以简化它。

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 个答案:

答案 0 :(得分:4)

借助已删除的答案找到答案。删除的答案错误只是因为它不完整。有了这个提示,我找到了the ViewStateMode Property page

总结它以禁用所有控件的ViewState并仅为选择的控件启用它:

  • 将页面和所有控件的EnableViewState属性设置为true。这是默认设置,因此无需编写任何内容
  • 将页面ViewStateMode设置为Disabled
  • 在您希望启用ViewState的控件中将ViewStateMode设置为Enabled

答案 1 :(得分:-3)

在我的计算机中,我创建了一个Web应用程序。结果与您相同。 我猜,当页面视图状态为false时,控制视图状态无法工作。