如何在ASP.NET AJAX上的保留函数pageLoad中检查页面是否回发
我正在寻找一种在pageLoad()
中进行检查的方法,该方法是在加载事件期间是否由于回发/异步回发或者由于首次加载和访问而引发的。
这类似于页面后面代码中的" Page.IsPostback"属性。
TIA,
瑞奇
解决方案
回答
如果是回发/回调,并且服务器上的javascript可以检查该值,则可以在服务器端将其设置为已知值的隐藏输入。
就是说,我真的希望有一个针对客户的解决方案。
编辑:@mmattax我相信他正在寻找与之等效的JavaScript客户端解决方案。
回答
我们可以做的就是连接Sys.Application类的load事件。然后,我们可以使用Sys.ApplicationLoadEventArgs类的isPartialLoad属性。我相信这会让我们知道我们是否处于异步回发中。
要知道我们是否在回发中,我们必须在服务器端代码中进行处理并将其发送给客户端。
回答
我们仍然可以在异步调用期间使用Page.IsPostback。
回答
@Darren:感谢回答。我曾尝试使用事件参数ApplicationLoadEventArgs作为参数创建pageLoad(请参见下文)。但是根据此:
对于服务器的所有回发都会引发load事件,其中包括异步回发。
如我们所指出的,isPartialLoad属性并不涵盖所有回发方案。如果事件参数还包含isPostback属性,那就太好了。
function pageLoad(sender, arg) { if (!arg.get_isPartialLoad()) { //code to be executed only on the first load } }
@mmattax:我正在寻找可以从客户端(javascript)调用的属性。
回答
如果只希望代码在首次加载时执行,则Application.Init可能是更适合使用的事件。
回答
@戴夫·沃德:这通常是可行的。但是,代码是将事件添加到行为对象上。由于行为对象的创建是在Application.Init期间发生的,因此添加到该事件将导致不可预测的行为。
如果有PostInit事件,那就太好了。
回答
我们可以执行的一种方法是在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调用之前,这应该是最后一件事。
回答
@戴夫·沃德:
RunOnce方法的使用效果很好。这解决了我的问题,而没有变通办法来在添加到事件之前先检查处理程序是否已经存在。
我会将答案标记为可接受的答案。再次感谢。
回答
这是我们与aPost等效的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; }