Подтвердить что ты не робот

Sys.WebForms.PageRequestManagerParserErrorException: сообщение, полученное с сервера, невозможно разобрать

У меня есть представление сетки на моей странице, и я хочу экспортировать его в лист Excel, Ниже приведен код, который я написал для выполнения этой задачи, здесь я уже передаю набор данных методу привязки сетки и btnExcelExport - это кнопка, которая будет экспортировать содержимое Grid в лист Excel: -

private void BindGridView(DataSet ds)
{
    if (ds.Tables.Count > 0)
    {
        if (ds.Tables[0].Rows.Count > 0)
        {
            GVUserReport.DataSource = ds;
            GVUserReport.DataBind();
            btnExcelExport.Visible = true;
        }
    }
}

protected void btnExcelExport_Click(object sender, EventArgs e)
{
    Response.Clear();
    Response.AddHeader("content-disposition","attachment;filename=FileName.xls");
    Response.Charset = "";
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.ContentType = "application/vnd.xls";
    System.IO.StringWriter stringWrite = new System.IO.StringWriter();
    System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
    GVUserReport.RenderControl(htmlWrite);
    Response.Write(stringWrite.ToString());
    Response.End();
}

public override void VerifyRenderingInServerForm(Control control)
{
    return;
}

Теперь, когда я отлаживаю, я обнаружил, что сетка успешно привязана, но при попытке экспортировать ее в Excel я получаю эту ошибку:

"Ошибка выполнения Microsoft JScript: Sys.WebForms.PageRequestManagerParserErrorException: сообщение полученные с сервера не могут быть проанализированы."

4b9b3361

Ответ 1

Я исправил эту проблему. Когда я использую UpdatePanel, я добавил код ниже в Page_Load на странице, и это сработало для меня:

protected void Page_Load(object sender, EventArgs e) {
  ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
  scriptManager.RegisterPostBackControl(this.btnExcelExport);
  //Further code goes here....
}

Ответ 2

В моем случае проблема была вызвана некоторыми командами Response.Write на главной странице веб-сайта (код позади). Они были там только для целей отладки (это не лучший способ, я знаю)...

Ответ 3

1- Никогда используйте Response.Write.

2- Я поставил код ниже после создания (не в Page_Load) LinkButton (динамически) и решил мою проблему:

ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
scriptManager.RegisterPostBackControl(lblbtndoc1);

Ответ 4

Для моих друзей VB.Net -

Dim scriptManager As ScriptManager = scriptManager.GetCurrent(Me.Page)
scriptManager.RegisterPostBackControl(Me.YourButtonNameHere)

Ответ 5

Я добавил элемент управления тегу Triggers на панели обновления:

    </ContentTemplate>
    <Triggers>
        <asp:PostBackTrigger ControlID="exportLinkButton" />
    </Triggers>
</asp:UpdatePanel>

Таким образом, exportLinkButton вызовет обновление UpdatePanel.
Подробнее здесь.

Ответ 6

Добавьте это к себе на страницу PageLoad, и она решит вашу проблему:

ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
scriptManager.RegisterPostBackControl(this.lblbtndoc1);

Ответ 7

У меня была такая же ошибка, затем я попробовал <asp:PostBackTrigger ControlID="xyz"/> вместо AsyncPostBackTrigger. Это работало для меня. Это потому, что мы не хотим частичной обратной передачи.

Ответ 8

Это тоже работало для меня, но с добавлением (ниже).

protected void Page_Load(object sender, EventArgs e) {
  ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
  scriptManager.RegisterPostBackControl(this.btnExcelExport);
  //Further code goes here....
}

Я зарегистрировал script на моей кнопке, чтобы щелкнуть по другой кнопке после завершения ее обработки. Чтобы он работал, мне пришлось удалить другую кнопку из панели обновления (на случай, если кто-то сталкивается с той же проблемой).

Ответ 9

Для меня работало то, что для aspnet: MaxHttpCollectionKeys было задано высокое значение в теге appSettings в файле inetpub VirtualDirectories\443\web.config:

<configuration>
    <appSettings>
        <add key="aspnet:MaxHttpCollectionKeys" value="100000" />
    </appSettings>
</configuration>