Ajax 与 Sys.WebForms.PageRequestManagerParserErrorException异常

  最近做项目遇到一个奇怪的问题:如果浏览器session丢失后,点击一个按钮,触发一个Ajax方法,浏览器会弹出一个对话框。异常信息如下: 

  后来经过查找,原来我的页面继承了一个BasePage.cs文件,BasePage.cs文件里判断session是否存在,如果不存在直接跳转到登录页(这里使用的跳转是Response.Redirect())。正是因为有这跳转代码的存在所有才导致了报错。Ajax方法是无法执行页面跳转的操作的。这里如果需要让Ajax方法执行跳转页面的操作,需要在web.Config文件里配置一下。添加以下代码即可:

<system.web>  

  <httpModules>   

    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0,                   Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 

    </httpModules>

 </system.web>  

 

  

  有的时候可能你会说,我的配置文件里面已经加上了这个配置信息,为什么页面还是会报错呢?   

  这种方式只支持你在cs文件里面执行Response.Redirect()的跳转,不支持Server.Transfer()Server.Execute()的转发,以及Response.Write("<script></script>")在页面输出脚本跳转。

  但是你可以使用Response.Redirect()跳转到指定页,在那个指定页里面写js脚本。

 

 

  当然了,如果你偏不要在配置文件里加上这段代码,你也可以象网上说的那样在页面文件加上如下Js脚本对异常信息进行友好的处理。

  <script language="javascript" type="text/javascript">

    //当使用ajax的页面,session丢失时,弹出提示并转向

    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);     function EndRequestHandler(sender, args)  

     

        if (args.get_error() != undefined){ 

            if(args.get_error().message.substring(0, 51) == "Sys.WebForms.PageRequestManagerParserErrorException")  

                window.location.reload(); //出现Session丢失时的错误处理,可以自己定义。 

            else

                alert( "登录超时,请重试! "); //其他错误的处理。

            args.set_errorHandled(true);

        }

   

    </script>

 

posted @ 2010-07-02 15:40  小杰仔  阅读(1251)  评论(0编辑  收藏  举报