繁体   English   中英

ASP.net页面生命周期问题

[英]ASP.net Page Life Cycle Problem

我了解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";

您总是可以直接检查post变量。 如果单击了提交按钮,则它在Request.Form集合中将具有一个值,如果不是回发或其他控件引起的回发,则不应显示该值。

有多种解决此问题的方法。

  • 将您的Page_Load代码放在OnPreRender 这将在RaisePostBackEvent之后发生,因此可以确保已处理任何按钮的单击。 请务必注意,根据您要在此处执行的操作,它可能不起作用。 在此类后续事件中,某些组件不接受某些属性更改。 如果可行,这是推荐的方法。
  • 在您的按钮上创建一个新事件,该事件在您更改ImageButton的CommandArgument时触发。 然后,在Page_Load上,为新按钮的事件创建一个处理程序,并将您示例中的代码放在Page_Load中。 使用此方法将导致此处理在OnPreRender之前进行

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

如果在page_load中设置了该变量,则可以将其包装在:

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

并为您的ImageButton设置一个OnClick事件

在Asp.Net Web窗体配置中,单击ImageButton应该触发ImageButton_OnClick类型的事件。 在您的标记中或在Page_Init事件方法中,您都需要连接以下事件处理程序:

在标记中:

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

在后面的代码中:

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

在这两种模型中,都应该创建按钮,并且方法应在回发时执行(单击按钮时)。

如果希望在触发按钮单击事件之前设置其他配置信息,则需要在Page.Load事件或Page.Init事件中进行设置。 无论何时选择接触控件并设置变量,都不得以任何方式将其从发回状态更改。 如果ImageButton的格式不完全像以前一样,则您将不会收到回发事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM