我正在寻找一种方法来检查pageLoad()
在加载事件期间是否由于回发/异步回发或由于第一次加载和访问而引发此方法。
这类似于Page.IsPostback
页后代码中的属性。
TIA,瑞奇
我正在寻找一种方法来检查pageLoad()
在加载事件期间是否由于回发/异步回发或由于第一次加载和访问而引发此方法。
这类似于Page.IsPostback
页后代码中的属性。
TIA,瑞奇
您可以这样做的一种方法是在 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 之前的最后一件事。
@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)调用的属性。
如果它是回发/回调,您可以在服务器端设置一个已知值的隐藏输入 - 并且您的 javascript 可以检查该值。
也就是说,我真的希望有一个仅限客户端的解决方案。
编辑: @mmattax - 我相信他正在寻找客户端解决方案 - 相当于 JavaScript。
您可以做的是连接到Sys.Application类的加载事件。然后,您可以使用Sys.ApplicationLoadEventArgs类的 isPartialLoad 属性。我相信这会让您知道您是否处于异步回发状态。
要知道您是否在回发中,您必须在服务器端代码中处理它并将其发送给客户端。
您仍然可以在异步调用期间使用 Page.IsPostback。
如果您只希望代码在第一次加载时执行,Application.Init可能是更合适的事件。
@Dave Ward:这通常会起作用。但是,代码是在行为对象上附加事件。因为行为对象的创建发生在 Application.Init 期间,附加到该事件将导致不可预知的行为。
如果有 PostInit 事件就好了。
@Dave Ward: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;
}