10

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

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

TIA,瑞奇

4

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

于 2008-09-05T03:29:49.690 回答
4

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

为服务器的所有回发引发 load 事件,其中包括异步回发。

正如您所指出的,isPartialLoad 属性并不涵盖所有回发方案。如果 event 参数还包含 isPostback 属性会很好。

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

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

于 2008-09-03T00:44:21.290 回答
2

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

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

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

于 2008-09-02T23:40:25.467 回答
2

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

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

于 2008-09-02T23:43:30.530 回答
0

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

于 2008-09-03T00:14:54.840 回答
0

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

于 2008-09-04T23:52:55.110 回答
0

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

如果有 PostInit 事件就好了。

于 2008-09-05T02:12:21.577 回答
0

@Dave Ward:RunOnce 方法的使用效果很好。这解决了我的问题,而无需在附加到事件之前先检查处理程序是否已经存在。

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

于 2008-09-05T17:05:12.380 回答
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;
    }
于 2008-09-16T18:09:24.990 回答