Я получаю следующую ошибку.linkbutton элемента управления gridview asp.net в пределах ошибки обновления панели обновления ajax
JavaScript runtime error: Sys.WebForms.PageRequestManagerParserErrorException: The message received
from the server could not be parsed.
Я попытался отладить его, в том числе найти помощь в Интернете, но я не смог решить проблему. Вот что у меня есть:
У меня есть сетка внутри панели обновления. Сетка имеет ссылку «btnRequest» в каждой строке. При нажатии кнопки ссылки необходимо загрузить текстовый файл на рабочий стол пользователя.
Вот мой код:
ASPX:
<div class="ModalPopup" id="ViewModalPopupDiv1">
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<ContentTemplate>
<table>
<tr>
<td>
<div class="modalHeader">
<table width="100%">
<tr>
<td class="title">
<asp:Label ID="Label2" runat="server" Text="WebServiceCall Details" Font-Bold="true" ></asp:Label>
</td>
<td>
<a href="javascript:void(0);" onclick="javascript:CloseModelPopup1();" class="CloseModal">
X</a>
</td>
</tr>
</table>
</div>
</td>
</tr>
<tr>
<td>
<div id="Div1" class="InsertBar">
<asp:Panel ID="Panel1" runat="server" HorizontalAlign="left" ScrollBars="Auto">
<asp:GridView ID="gvDetails" OnRowDataBound="gvDetails_RowDataBound"
OnRowCommand="gvDetails_RowCommand" DataKeyNames="Name"
runat="server" CellPadding="5" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Image Width="32px" ID="statusImage" runat="server" Height="32px"></asp:Image>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="LogId">
<ItemTemplate>
<asp:LinkButton CommandName="DownloadTextFile" Text='<%# Bind("LogId") %>'
CommandArgument='<%# Container.DataItemIndex %>' runat="server" ID="btnRequest"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</asp:Panel>
</div>
</td>
</tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>
</div>
aspx.cs
protected void gvDetails_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName.ToLower() == "DownloadTextFile")
{
int index;
index = Convert.ToInt32(e.CommandArgument);
object objTemp = gvDetails.DataKeys[index].Values[1].ToString();
string Request;
string fileName = string.Empty;
if (objTemp != null)
{
Request = XMLHelper.IndentXmlString(GetLogRequestByName((objTemp.ToString())));
StringBuilder sb = new StringBuilder();
sb.AppendLine(Request + "\r\n");
fileName = "log" + "_" + objTemp.ToString();
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=" + fileName + ".txt");
Response.Charset = "";
Response.ContentType = "text/plain";
Response.Output.Write(sb.ToString());
Response.Flush();
Response.End();
}
}
}
Из моих исследований, я вроде понял, что объект Response использует HttpHandler и имеющий это на панели обновления вызывает ошибку. Но я не мог понять, как решить проблему. Пожалуйста, дайте мне знать, если у вас есть вопросы, которые могут помочь мне решить проблему.
Hey Karl! Спасибо ! Я понимаю, что вы говорите. Если это способ, которым вы могли бы показать мне пример кода, это будет здорово и даст мне понять. Спасибо! – CodeNinja
Я обновил свой первоначальный ответ, включив синтаксис тега привязки. Чтобы использовать это в сценарии GridView, вам нужно будет поместить сборку компонентов привязывающего тега внутри события RowDataBound с помощью StringBuilder, а затем ввести его в TemplateColumn. –