【问题标题】:ASP.net Page Life Cycle ProblemASP.net 页面生命周期问题
【发布时间】:2011-04-15 18:26:10
【问题描述】:

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

【问题讨论】:

  • 在页面加载中一定要search()吗?
  • @AGoodDisplayName 的名称有点误导,但是如果条件为真,则需要在页面加载期间执行。
  • 可能是因为 FindControl 中有两个“Y”吗? ImageButton btn = (ImageButton)(Page.FindControl("displayyImgBtn"));(这段代码是剪切粘贴的吗?)

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      只需为您的 ImageButton 设置一个 OnClick 事件

      【讨论】:

        【解决方案4】:

        在 Asp.Net 网络表单配置中,单击 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 的格式与以前不完全一样,您将不会收到回发事件。

        【讨论】:

          猜你喜欢
          • 2011-07-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多