如何检查页面是否在 ASP.NET AJAX 上的保留功能 pageLoad 内回发
-
09-06-2019 - |
题
我正在寻找一种方法来检查内部 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;
}