我正在寻找一种在pageLoad()
内检查是否在加载事件期间由于回发/异步回发或由于第一次加载和访问而引发此方法的方法。
这类似于页面后面代码中的Page.IsPostback
属性。
TIA, 瑞奇
答案 0 :(得分: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之前的最后一件事。
答案 1 :(得分:3)
针对服务器的所有回发都会引发加载事件,其中包括异步回发。
如您所示,isPartialLoad属性未涵盖所有回发方案。如果event参数还包含isPostback属性,那将会很好。
function pageLoad(sender, arg) {
if (!arg.get_isPartialLoad()) {
//code to be executed only on the first load
}
}
@mmattax:我正在寻找可以从客户端(javascript)调用的属性。
答案 2 :(得分:2)
如果是回发/回调,您可以在服务器端设置一个已知值的隐藏输入 - 并且您的javascript可以检查该值。
那就是说,我真的希望有一个仅限客户的解决方案。
编辑: @mmattax - 我相信他正在寻找一种客户端解决方案 - 与此相当的JavaScript。
答案 3 :(得分:2)
您可以做的是连接到Sys.Application类的加载事件。然后,您可以使用Sys.ApplicationLoadEventArgs类的isPartialLoad属性。我相信如果您处于异步回发状态,我会告诉您。
要知道你是否在回帖中,你必须在服务器端代码中处理它并将其发送给客户端。
答案 4 :(得分:0)
在异步调用期间,您仍然可以使用Page.IsPostback。
答案 5 :(得分:0)
Application.Init可能是一个更合适的事件。
答案 6 :(得分:0)
@Dave Ward:这通常会起作用。但是,代码是在行为对象上附加事件。因为行为对象的创建发生在Application.Init期间,所以附加到该事件将导致不可预测的行为。
如果有PostInit事件会很好。
答案 7 :(得分:0)
@Dave Ward: RunOnce方法的使用非常有效。这解决了我的问题,没有解决方法在附加到事件之前首先检查处理程序是否已存在。
我会将您的答案标记为已接受的答案。再次感谢。
答案 8 :(得分:0)
这是我们的Ajax相当于isPostback,我们已经使用了一段时间。
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;
}