最近在使用ajax的时候经常出现下面的问题:
Sys.WebForms.PageRequestManagerParserErrorException:The message received from the server
count not be parsed.Common causes for this error are when the response is modified by calls to response.Write(),response filters,HttpModules,or server trace is enabled.
Details:Error parsing near '|0|hiddenField|_EVENTTRAGE'
经过排查,发现是AJAX和多语言起了冲突,只要不再UpdatePanel里的代码都没问题,出问题的就是UpdatePanel里面只要一进行无刷新操作就报错,因为涉及到多语言,所以页面要经过翻译再回发,可能是在回发的时候AJAX判断回发内容有所改变所以才会报错,在网上找了下解决方法,几乎搜索到的都是这样的方法:
在用Response.Redirect()或Response.Write()进行URL带参数的页面重定向时出现如题所示的错误。Ajax是无刷新的,而使用Response进行带参重定向时需要刷新页面。所以只须在UpdatePanel下设置“asp:PostBackTrigger”的“ControlID”为指定的控件名称即可,如: 
<Triggers> 
<asp:PostBackTrigger ControlID="btnSave" /> 
</Triggers>
我想说的是,这个方法虽然可以解决报错问题,可是页面也变成全页刷新了,那样的话跟我不用AJAX有什么区别呢 ?
在此想请教各位有经验的朋友遇到这个问题一般是怎么处理的 ???

解决方案 »

  1.   

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="AddTX.aspx.cs" Inherits="His_Add" EnableEventValidation="false"%>
    页面里加个这个看看
    EnableEventValidation="false"
      

  2.   

    总之用AJAX就是这样的,你最好用到AJAX的数据字段不要用中文,换成数字或英文。
      

  3.   

    回6楼的,我每个页面都继承了一个BasePage父类,在父类中有一个方法负责翻译后重绘页面!
    protected override void Render(HtmlTextWriter writer)
            {
                try
                {
                    StringWriter stringWriter = new StringWriter();
                    HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter, string.Empty);
                    base.Render(htmlWriter);                Response.Clear();                String stringOutput = stringWriter.ToString();                           
                    //对页面进行翻译并输出
                    stringOutput = LanguageHelper.TranslateString(stringOutput);
                    //错误就是在下面输出的时候发生
                    Response.Write(stringOutput);
                    return;
                }
                catch
                {
                    base.Render(writer);
                }
            }
    在网上也看到很多方法提示不要用Response.Write输出,改用ScriptManager.RegisterStartupScript(this.UpdatePanel1, this.GetType(), "updateScript", "alert('对不起,账号和密码错误');", true); 这样的方式来输出。问题是我这个方法是在父类里面,几乎所有的页面都继承了父类,我怎么可能传控件进去