【问题标题】:Am I supposed to be able to alter other controls from an ASP.NET page event handler?我应该能够从 ASP.NET 页面事件处理程序中更改其他控件吗?
【发布时间】:2008-11-07 10:42:03
【问题描述】:

我正在尝试从复选框的 CheckedChanged 事件处理程序中禁用标签控件。我应该能够做到这一点吗?

目前,如果我将 Enabled 设置为 false,则页面重新加载时不会发生任何变化。如果我在 Page_Load 中做同样的事情,那么我会看到变化。

澄清一下:

这不起作用:

protected void chkNeverExpires_CheckedChanged(object sender, EventArgs e)
{
    this.lblMessage.Enabled = false
}

但这确实:

protected void Page_Load(object sender, System.EventArgs e)
{
    this.lblMessage.Enabled = false
}

【问题讨论】:

    标签: asp.net controls page-lifecycle


    【解决方案1】:

    您确定事件按您期望的顺序触发吗?在所有回发方法上设置断点并观察会发生什么,您是否在任何地方重置启用状态?你有什么 enableviewstate=false 吗?

    编辑:您意识到 CheckedChanged 在您从另一个控件回发之前不会触发,或者您在 checbkbox 上设置了 AutoPostBack=true?

    这很好用:

    <asp:Label runat="server" ID="lblTest">test</asp:Label>
    <asp:CheckBox runat="server" ID="chkCheck" AutoPostBack="true" />Check
    
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        chkCheck.CheckedChanged += chkCheck_CheckedChanged;
    }
    
    private void chkCheck_CheckedChanged(object sender, EventArgs e)
    {
        lblTest.Enabled = false;
    }
    

    【讨论】:

    • 是的,我确实将 AutoPostBack 设置为 true。我的 OnInit 事件处理程序中没有多余的行,这很有趣。我想知道这是否相关?
    • 我的事件确实触发了,但我似乎无法改变页面的其余部分。更改不会在任何地方持续存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多