【问题标题】:MasterPage Page_Load hits before Grid_ItemCommandMasterPage Page_Load 在 Grid_ItemCommand 之前命中
【发布时间】:2012-06-17 09:09:04
【问题描述】:

我正在使用会话对象来存储基于用户操作的成功/错误消息。

在每次回发时,都会在 ItemCommend 上设置消息,并在母版页的 Page_Load 上检索消息。检索到后,该消息将从会话中删除。

问题是母版页的 Page_Load 在调用 ItemCommand 之前被调用,因此消息直到下一次刷新或回发时才会显示。

这种情况通常如何处理?还有其他一些我们可以针对的事件进行编码吗?

【问题讨论】:

    标签: c# asp.net .net master-pages itemcommand


    【解决方案1】:

    这是 aspx 和母版页的正常行为。首先,在该母版页的页面加载被触发之后,内容页面的页面加载被触发,然后是所有其他点击等。

    您可以使用 PageLoad Complete 事件来解决您的问题。

    【讨论】:

    • 谢谢。由于我使用 MasterPage 来显示消息,因此它没有该事件。只有 Page 类可以。所以我尝试添加this.Page.LoadComplete += new System.EventHandler(Page_LoadComplete);,其中this 是MasterPage。现在的问题是事件处理程序不断在每个Page_Load 上附加 Page_LoadComplete 事件的其他副本。
    • 一个快速的解决方法是使用this.Page.LoadComplete -= new System.EventHandler(Page_LoadComplete);,然后使用this.Page.LoadComplete += new System.EventHandler(Page_LoadComplete);。有没有更好的办法?有没有办法在 ASPX 中声明事件而不是在母版页后面的代码?
    • 然后尝试使用母版页的 PreRender 事件。我认为它应该对你有用。是母版页的预定义事件。它在内容页面加载和内容页面预渲染后触发。
    • 您可以使用另一种替代方法,即在母版页上声明属性,并在控件的项目命令中使用该属性。编写您需要的代码来更新此属性中的会话值。
    【解决方案2】:

    这是一种正常行为。在itemcommandPage_prerender 上显示您的消息

    【讨论】:

      【解决方案3】:

      在母版页的代码后面创建一个公共方法,如下所示:

       public void Set_Value(String SessionValue)
         {
            //your code here
         }
      

      在内容页面的 aspx 文件中,使用以下代码行:

        <%@ MasterType VirtualPath="~/MasterPage.master" %>
      

      现在在您的内容页面的代码后面,您可以轻松地在您的任何控件的项目事件中调用母版页的方法。在母版页的方法中,您可以编写所需的代码来更新和显示值。

      在内容页面上调用母版页的方法如下:

        this.Master.Set_Value(Session["abc"].ToString());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-14
        • 1970-01-01
        • 1970-01-01
        • 2011-12-03
        • 1970-01-01
        • 2023-04-05
        • 1970-01-01
        相关资源
        最近更新 更多