Asp.net 复选框选中“可见性设置为false时状态更改”

Asp.net 复选框选中“可见性设置为false时状态更改”,asp.net,viewstate,Asp.net,Viewstate,我在理解在页面生命周期的各个阶段设置复选框可见性对选中状态的影响时遇到一些困难 下面给出了一个动态创建的复选框的示例代码 protected override void OnInit(EventArgs e) { base.OnInit(e); check = new CheckBox(); check.AutoPostBack = true; check.Text = "checkbox1"; c

我在理解在页面生命周期的各个阶段设置复选框可见性对选中状态的影响时遇到一些困难

下面给出了一个动态创建的复选框的示例代码

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);

        check = new CheckBox();
        check.AutoPostBack = true;
        check.Text = "checkbox1";
        check.ToolTip = "tooltip for checkbox1";
        check.CheckedChanged += new EventHandler(check_CheckedChanged);  

        this.Form.Controls.Add(check);
        Button btn = new Button();
        btn.Text = "click me";
        btn.Click += new EventHandler(btn_Click);
        this.Form.Controls.Add(btn);

    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            check.Checked = true;
            check.Text = "text reassigned.";
            check.ToolTip = "tooltip reassigned";
        }

    }

    protected override void OnPreRenderComplete(EventArgs e)
    {            
        base.OnPreRenderComplete(e);
        check.Visible = false;
    }
这里的问题是,当回发发生时(我单击按钮),我注意到在Page_load事件中,复选框保持工具提示和文本的viewstate。但是,checked状态更改为false,并触发CheckedChanged事件。为什么这种行为如此

此外,如果我在PageLoad()或OnPreRender()事件中设置复选框的可见性,复选框的选中状态将在回发中保持,并且不会触发CheckedChanged事件


我只是想知道,在OnPreRenderComplete事件中更改可见性,使复选框默认为未选中状态时,会发生什么不同的情况。

我已经将我的上一个答案标记为删除,因为我没有正确理解这个问题

你正在做的事情是:

  • 您在服务器端的Init事件中添加了运行时复选框
  • 然后在“页面加载”中,在“不回发”检查中将其值设置为true
  • 然后在OnPreRenderComplete事件中将其可见性设置为false
  • 当您在服务器端将可见性设置为false时,控件不会在客户端生成(您可以通过查看页面源代码来检查),因为控件不会在客户端创建,所以当您回发页面时,复选框会在page init中创建,因为它不在客户端,所以dot net不知道它的最后一个值,因此,复选框为false

    如果需要进一步检查,请将OnPreRenderComplete事件更改为:

    protected override void OnPreRenderComplete(EventArgs e)
        {
            base.OnPreRenderComplete(e);
            //check.Visible = false;
            check.Style.Add("display", "none");
        }
    

    通过上行,样式被添加到控件中,因此控件在客户端生成,但不可见,您将在回发过程中获得其值。

    这有什么用?是好奇心吗?页面生命周期是一个众所周知的谜。哇,我对你的问题投了1票,现在我意识到文本和工具提示将被保留,而不是选中的值$当我解码页面的viewstate时,我发现其中存在文本和工具提示值,并对选中值进行调整,这是一个非常奇怪的行为。我遇到了另一个问题,在Init事件中,我每次都为复选框指定一个新的ID,比如:check.ID=“chkMyCheckBox”+DateTime.Now.Second.ToString(); 如果我这样做,复选框将保留其选中值,并且CheckedChanged事件不会触发。