为什么我的CheckBox.Checked属性会重置?

时间:2012-03-15 19:43:18

标签: c# asp.net controls postback pageload

使用:.NET 3.5SP1,VS2008

我正在编辑别人的asp.net脚本,他在Page_Load进行了数据撤销,而页面没有回发。

即使我在页面中刷新,导航,回发后,我也可以看到数据已正确填充到DropDownList中。

我将更多的DropDownList和一些CheckBox添加到脚本中,只添加了我添加的DropDownList。但不是CheckBox。

所以我在一个新项目中进行测试,类似于它的脚本结构:

ASPX:

<form id="form1" runat="server">
    <div>
        <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true">
            <asp:ListItem>Item1</asp:ListItem>
            <asp:ListItem>Item2</asp:ListItem>
        </asp:DropDownList>
        <% 
            if (DropDownList1.SelectedValue == "Item2")
            {                
        %>
        <asp:CheckBox ID="CheckBox1" runat="server" Text="CheckBox 1" />
        <asp:TextBox ID="TextBox1" runat="server" Text="" />
        <asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="true">
            <asp:ListItem>Item1</asp:ListItem>
            <asp:ListItem>Item2</asp:ListItem>
        </asp:DropDownList>
        <%
            }
        %>
    </div>
    </form>

代码隐藏:

 public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                this.CheckBox1.Checked = true;
                this.CheckBox1.Text = "Hello CheckBox";
                this.TextBox1.Text = "Hello TextBox";
                this.DropDownList2.SelectedValue = "Item2";
            }
        }
    }

当您看到代码时,首次加载页面时,CheckBox1的文字会发生变化,Checked将为真,其他TextBox和{{1}也是如此}

我选择DropDownList2的项目为DropDownList1后,Item2CheckBox1TextBox1没有设置,{{1}除外}。

为什么会这样?

编辑:

我试图将它们放入Panel中,这样就可以了。但问题是我正在编辑的程序正在使用上面的格式。所以我不允许将它们全部更改为Panel。

DropDownList2

1 个答案:

答案 0 :(得分:0)

尝试设置EnableViewStateViewStateMode,也许某些父控件已将其禁用,因此已应用默认的Inherit值。

MSDN

  

Web服务器的ViewStateMode属性的默认值   页面中的控件是继承。因此,如果您不设置此项   页面或控件级别的属性,值   EnableViewState属性确定视图状态行为。

<asp:CheckBox ID="CheckBox1" runat="server" Text="CheckBox 1" 
              EnableViewState="true"
              ViewStateMode="Enabled" />