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: сообщение полученные с сервера не могут быть проанализированы."
Ответы
Ответ 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>