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

这类似于 Page.IsPostback 代码隐藏页面内的属性。

蒂亚,里奇

有帮助吗?

解决方案

一种方法是在 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 之前的最后一件事。

其他提示

@达伦:感谢你的回答。我曾尝试使用事件参数创建 pageLoad 应用程序加载事件参数 作为参数(见下文)。然而根据 :

为服务器的所有回发(包括异步回发)引发 load 事件。

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

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

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

你能做的就是连接到加载事件 系统应用 班级。然后你可以使用 isPartialLoad 属性 Sys.ApplicationLoadEventArgs 班级。我相信这会让您知道您是否处于异步回发状态。

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

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

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

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

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

应用程序初始化 如果您只想在第一次加载时执行代码,则可能是更合适的事件。

@戴夫·沃德:这通常会起作用。但是,代码是将事件附加到行为对象上。由于行为对象的创建发生在 Application.Init 期间,因此附加到该事件将导致不可预测的行为。

如果有 PostInit 事件就好了。

@戴夫·沃德:使用 RunOnce 方法效果很好。这解决了我的问题,而没有解决方法来在附加到事件之前首先检查处理程序是否已存在。

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

这是相当于 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;
    }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top