Ajax 与 Sys.WebForms.PageRequestManagerParserErrorException异常

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>

 

 

======================以上转

 

寡人遇到的,在该页面中,session中的值不可以是对象(必须是单个的类型)

否则也会报这样的错,为虾米呢???

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值