如何检查页面是否在ASP.NET AJAX上的保留函数pageLoad中回发

时间:2008-09-02 23:27:23

标签: javascript asp.net-ajax postback lifecycle

我正在寻找一种在pageLoad()内检查是否在加载事件期间由于回发/异步回发或由于第一次加载和访问而引发此方法的方法。

这类似于页面后面代码中的Page.IsPostback属性。

TIA, 瑞奇

9 个答案:

答案 0 :(得分:6)

您可以这样做的一种方法是在Application.Init中连接Application.Load处理程序,然后让该处理程序在运行后取消绑定:

Sys.Application.add_init(AppInit);

function AppInit() {
  Sys.Application.add_load(RunOnce);
}

function RunOnce() {
  // This will only happen once per GET request to the page.

  Sys.Application.remove_load(RunOnce);
}

这将在Application.Init之后执行。它应该是调用pageLoad之前的最后一件事。

答案 1 :(得分:3)

@Darren:谢谢你的回答。我曾尝试使用事件参数ApplicationLoadEventArgs创建pageLoad作为参数(见下文)。但是根据this

针对服务器的所有回发都会引发加载事件,其中包括异步回发。

如您所示,isPartialLoad属性未涵盖所有回发方案。如果event参数还包含isPostback属性,那将会很好。

   function pageLoad(sender, arg) {
      if (!arg.get_isPartialLoad()) {
          //code to be executed only on the first load
      }
   }

@mmattax:我正在寻找可以从客户端(javascript)调用的属性。

答案 2 :(得分:2)

如果是回发/回调,您可以在服务器端设置一个已知值的隐藏输入 - 并且您的javascript可以检查该值。

那就是说,我真的希望有一个仅限客户的解决方案。

编辑: @mmattax - 我相信他正在寻找一种客户端解决方案 - 与此相当的JavaScript。

答案 3 :(得分:2)

您可以做的是连接到Sys.Application类的加载事件。然后,您可以使用Sys.ApplicationLoadEventArgs类的isPartialLoad属性。我相信如果您处于异步回发状态,我会告诉您。

要知道你是否在回帖中,你必须在服务器端代码中处理它并将其发送给客户端。

答案 4 :(得分:0)

在异步调用期间,您仍然可以使用Page.IsPostback。

答案 5 :(得分:0)

如果您只希望代码在第一次加载时执行,那么

Application.Init可能是一个更合适的事件。

答案 6 :(得分:0)

@Dave Ward:这通常会起作用。但是,代码是在行为对象上附加事件。因为行为对象的创建发生在Application.Init期间,所以附加到该事件将导致不可预测的行为。

如果有PostInit事件会很好。

答案 7 :(得分:0)

@Dave Ward: RunOnce方法的使用非常有效。这解决了我的问题,没有解决方法在附加到事件之前首先检查处理程序是否已存在。

我会将您的答案标记为已接受的答案。再次感谢。

答案 8 :(得分:0)

这是我们的Ajax相当于isPostback,我们已经使用了一段时间。

public static bool isAjaxRequest(System.Web.HttpRequest request)
    {//Checks to see if the request is an Ajax request
        if (request.ServerVariables["HTTP_X_MICROSOFTAJAX"] != null ||
            request.Form["__CALLBACKID"] != null)
            return true;
        else
            return false;
    }