如何修复错误:无法解析从服务器收到的消息

时间:2009-10-12 13:55:30

标签: c# ajax sharepoint

我们有一个使用AJAX的Sharepoint解决方案。触发此操作的按钮位于更新面板中。

我们所做的一件事就是生成一个MS Word文档,然后在客户端上打开它,以便打印它。

将文档发送到客户端的代码如下所示:

    void OpenFileInWord(byte[] data)
    {
        Response.Clear();
        Response.AddHeader("Content-Type", "application/msword");
        Response.BinaryWrite(data);
        Response.Flush();
        Response.End();
    }

我们得到的错误是:

Message: Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could 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 '<?mso-application pr'.

我们可以先在Sharepoint中保存文档,然后从Sharepoint打开它,但我们不希望这样做。

10 个答案:

答案 0 :(得分:33)

如果你在updatepanel里面有这个按钮,这可能导致这个,如果不想移动它,只需在updatepanel上添加一个触发器,一个回发触发器。

答案 1 :(得分:20)

导致此代码执行的操作必须是回发事件,而不是AJAX调用。

这是由于处理AJAX请求的方式的性质。

答案 2 :(得分:6)

将按钮放在更新面板之外。然后它工作正常。

答案 3 :(得分:3)

尝试在页面加载中添加脚本管理器,如下所示:

((ScriptManager)Master.FindControl("ScriptManager1")).RegisterPostBackControl(btnExport);

答案 4 :(得分:1)

在按钮上单击,重定向到另一个页面,该页面可以流式传输您可能想要执行此类操作的任何文件。我们在许多站点中使用document.aspx页面,然后通过查询字符串传递文档ID并从那里传输文件。

在您的示例中,您基本上是在尝试更改已经显示的页面的标题,这是不允许的

答案 5 :(得分:1)

对我来说,问题是网格视图的模板列中的重复控件ID。一旦我将控件重命名为独特的网格范围,问题就消失了!

答案 6 :(得分:1)

我在asp:UpdatePanel控件中有一个asp:Table控件。 该表有一些静态行,并且在此期间添加了一些行 回发事件。

发生此错误是因为表的行和列没有 有静态ID。因此ID在每次回发时都会发生变化 恢复表的ViewState的问题。

要停止此错误,我禁用了表的ViewState:EnableViewState =&#34; false&#34;

<asp:Table ID="PageContentTable" runat="server" ... EnableViewState="false">

答案 7 :(得分:1)

将您的按钮设置为引起完全回发,如下所示:

 <Triggers>
<asp:PostBackTrigger ControlID="PrintButton" />
</Triggers>

答案 8 :(得分:0)

我删除了按钮周围的更新面板,它运行正常。

答案 9 :(得分:0)

我为此苦了几个小时。在我的WebForms Code-Behind文件中执行ajax请求无法正常工作,并且使用UpdatePanel导致了烦人的错误,而我找不到解决方案。终于,我找到了可行的解决方案!

  • 在项目中的某个地方创建一个.ashx(通用处理程序)文件。我在顶级服务文件夹中创建了我的我,所以:Services\EventsHandler.ashx。完成此操作后,您应该同时拥有一个.ashx.ashx.cs文件。
  • ashx.cs文件中,您会发现一个ProcessRequest方法,您可以在其中放置所有代码。
  • 您可以调用此方法,以执行与JavaScript文件中类似的操作:

    $('#MyButton').click(function () {
        var zipCode = $('#FBZipBox').val();
    
        $.getJSON('/Services/EventsHandler.ashx?zip=' + zipCode, function (data) {
            var items = [];
            $.each(data.Results, function (key, item) {
            items.push('<span>item.Date</span>');
        });
    }).complete(function () {
        // More Logic
    });
    return false;});
    
  • ashx.cs文件中,您可以使用以下命令访问查询参数:

    变量类别= context.Request.QueryString [“ zipCode”];

  • 然后您可以使用以下方法返回结果:

    context.Response.Write(yourResponseString);