ASP.net页面生命周期问题

本文关键字:周期 问题 生命 net ASP | 更新日期: 2023-09-27 17:50:22

我了解ASP.net页面生命周期,当我点击一个按钮时,它首先重新加载页面,然后执行我的按钮后面的代码。我的问题是我如何得到它,这样我就可以在这个过程发生之前设置一些东西。我试图传递一个变量,按钮已被单击,但由于页面生命周期,它从未接收到这个。我该怎么做才能确定这个按钮被点击了,也许我想多了,或者甚至想少了。

页面加载:

        ImageButton btn = (ImageButton)(Page.FindControl("displayYImgBtn"));
        if (btn != null)
        {
            string state = btn.CommandArgument;
            if (state == "true")
            {
                search();
                btn.CommandArgument = "false";
            }
        }

按钮:

    ImageButton btn = (ImageButton)(sender);
    btn.CommandArgument = "true";

ASP.net页面生命周期问题

您总是可以直接检查post变量。如果你的提交按钮被点击,它将在Request.Form集合中有一个值,如果它不是postback或其他控制引起的postback,它不应该出现

有很多不同的方法来解决这个问题。

  • Page_Load代码放在OnPreRender上。这将在RaisePostBackEvent之后发生,因此可以保证任何按钮的点击都已被处理。重要的是要注意,根据你要做的事情,它可能不起作用。有些组件不接受此类后续事件中的某些属性更改。如果有效,这是推荐的方法。
  • 在你的按钮上创建一个新的事件,当你改变ImageButton的命令参数时触发。然后,在Page_Load上,为新按钮的事件创建一个处理程序,并将示例中Page_Load中的代码放在那里。使用这种方法将导致此处理在OnPreRender之前发生。

我想这取决于你的Page_Load事件中还发生了什么。

如果该变量是在page_load中设置的,可以用:

If(!Page.IsPostback) {
   // only execute when the page first loads
}

为你的ImageButton添加一个OnClick事件

. Net webforms配置中,ImageButton点击应该触发ImageButton_OnClick类型的事件。无论是在标记中还是在Page_Init事件方法中,都需要连接以下事件处理程序:

在标记:

<asp:imagebutton click="ImageButton_Onclick" runat="server" id="displayYImgBtn" />

在代码后面:

public void Page_Init() {
   displayYImgBtn.Click += ImageButton_OnClick;
}

在任何一个模型中,你的按钮都应该被创建,你的方法应该在回发时执行(当按钮被点击时)。

如果您希望在触发按钮单击事件之前设置其他配置信息,则需要在页面中执行该操作。Load事件,或Page。初始化事件。无论什么时候你选择接触到你的控制和设置变量,你都不能以任何方式改变它从它被发布回来的状态。

如果ImageButton没有完全按照之前的格式格式化,则不会收到回发事件。