如何在ASP.NET AJAX中的保留函数pageLoad中检查页面是否进行了回发(postback)

10

我正在寻找一种方法,在pageLoad()中检查此方法是否在加载事件期间由于回发/异步回发而引发,还是因为首次加载并访问。

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

TIA, Ricky

9个回答

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之前的最后一件事。


4

@Darren: 感谢您的回答。我曾尝试使用事件参数ApplicationLoadEventArgs创建pageLoad(如下所示)。然而,根据此文档

加载事件会在所有发送到服务器的postback中引发,包括异步postback。

正如您所指出的,isPartialLoad属性并不包含所有postback场景。如果事件参数也包含isPostback属性,那就太好了。

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

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


2

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

话虽如此,我真的希望有一个仅客户端的解决方案。

编辑: @mmattax - 我相信他正在寻找客户端解决方案-即JavaScript的等效解决方案。


2
你可以连接到Sys.Application类的负载事件。然后,你可以使用Sys.ApplicationLoadEventArgs类的isPartialLoad属性。我相信这将让你知道是否处于异步回发状态。
要知道是否处于回发状态,你需要在服务器端代码中处理并将其发送到客户端。

0

这是我们使用了一段时间的isPostback的Ajax等效代码。

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;
    }

0

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


0

Application.Init 可能是更适合使用的事件,如果你只想在第一次加载时执行代码。


0

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

如果有PostInit事件会很好。


0

@Dave Ward: 使用RunOnce方法非常完美。这解决了我的问题,而不需要在附加到事件之前先检查处理程序是否已经存在的解决方法。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接