ASP.net页面生命周期问题

时间:2011-04-15 18:26:11

标签: c# asp.net postback page-lifecycle

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

4 个答案:

答案 0 :(得分:3)

您可以随时直接检查帖子变量。如果单击了提交按钮,它将在Request.Form集合中有一个值,如果它不是回发或其他一些控件导致回发,则不应该出现。

答案 1 :(得分:1)

有多种不同的方法可以解决这个问题。

  • Page_Load代码放在OnPreRender上。这将在RaisePostBackEvent之后发生,因此可以保证已经处理了任何按钮的点击。重要的是要注意,取决于你将要做什么,它可能无法正常工作。某些组件在此类事件中不接受某些属性更改。如果它有效,这是推荐的方法。
  • 在您更改ImageButton的CommandArgument时触发的按钮上创建一个新事件。然后,在Page_Load上,为新按钮的事件创建一个处理程序,并将示例中的代码放在Page_Load中。使用此方法将导致此处理在OnPreRender
  • 之前发生

答案 2 :(得分:0)

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

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

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

只为你的ImageButton有一个OnClick事件

答案 3 :(得分:0)

在Asp.Net webforms配置中,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没有像之前那样完全格式化,那么您将不会收到回发事件。