在 GridView 和 UpdatePanel 中使用 LinkButton 出现 0x800a139e 错误
Using LinkButton inside GridView and UpdatePanel getting 0x800a139e error
我在 UpdatePanel
中使用 Gridview
。在那个 Gridview
中,我为 CommandArgument
使用 LinkButton
(我对 imageButton
有同样的问题),并尝试在用户单击时下载 pdf 文件。
在 UpdatePanel
中获取按钮 运行 很棘手,但一切似乎都很好。用户单击按钮,我得到了带有 CommandArgument
的正确 ID。使用此 ID,我尝试 Response
pdf 文件但出现错误:
0x800a139e - JavaScript runtime error: Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed.
pdf 文件在服务器上,UpdatePanel
外有一个按钮,我得到了正确的 pdf 文件。那么我必须更改什么才能将其放入 UpdatePanel
运行?谢谢
网格视图:
<asp:TemplateField HeaderText="" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:LinkButton ID="Fehlermeldung" runat="server" CommandArgument='<%#Eval("ID")%>' OnClick="Fehlermeldung_Click1">
<asp:Image ID="Fehler" ImageUrl="~/images/fehlermeldung.png" ToolTip="Fehlermeldung anzeigen" runat="server" />
</asp:LinkButton>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
后面的代码:
protected void Fehlermeldung_Click1(object sender, EventArgs e)
{
string id = ((LinkButton)sender).CommandArgument;
Response.ClearHeaders();
Response.ContentType = "application/pdf";
Response.Clear();
Response.AppendHeader("Content-Disposition", "attachment;Filename=Fehlermeldung_" + id + ".pdf");
Response.TransmitFile(Page.MapPath(@"App_Data\Fehlermeldung_" + id + ".pdf"));
Response.End();
}
问题是您的 Fehlermeldung
link 按钮包含在 TemplateField
中,因此您不能像正常的 LinkButton
那样直接引用它。
您应该处理 GridView
的 RowDataBound
事件以通过其控件名称找到 link 按钮,并使用 RegisterPostBackControl()
(GridViewName
是您的网格视图 ID):
ASPX 标记
<asp:GridView ID="GridViewName" OnRowDataBound="GridViewName_RowDataBound" runat="server" ...>
<%-- gridview contents --%>
</asp:GridView>
代码隐藏
protected void GridViewName_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
// find link button first
LinkButton btn = e.Row.FindControl("Fehlermeldung") as LinkButton;
// use postback trigger assignment
ScriptManager.GetCurrent(Page).RegisterPostBackControl(btn);
}
}
参考:
Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed
我在 UpdatePanel
中使用 Gridview
。在那个 Gridview
中,我为 CommandArgument
使用 LinkButton
(我对 imageButton
有同样的问题),并尝试在用户单击时下载 pdf 文件。
在 UpdatePanel
中获取按钮 运行 很棘手,但一切似乎都很好。用户单击按钮,我得到了带有 CommandArgument
的正确 ID。使用此 ID,我尝试 Response
pdf 文件但出现错误:
0x800a139e - JavaScript runtime error: Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed.
pdf 文件在服务器上,UpdatePanel
外有一个按钮,我得到了正确的 pdf 文件。那么我必须更改什么才能将其放入 UpdatePanel
运行?谢谢
网格视图:
<asp:TemplateField HeaderText="" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:LinkButton ID="Fehlermeldung" runat="server" CommandArgument='<%#Eval("ID")%>' OnClick="Fehlermeldung_Click1">
<asp:Image ID="Fehler" ImageUrl="~/images/fehlermeldung.png" ToolTip="Fehlermeldung anzeigen" runat="server" />
</asp:LinkButton>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
后面的代码:
protected void Fehlermeldung_Click1(object sender, EventArgs e)
{
string id = ((LinkButton)sender).CommandArgument;
Response.ClearHeaders();
Response.ContentType = "application/pdf";
Response.Clear();
Response.AppendHeader("Content-Disposition", "attachment;Filename=Fehlermeldung_" + id + ".pdf");
Response.TransmitFile(Page.MapPath(@"App_Data\Fehlermeldung_" + id + ".pdf"));
Response.End();
}
问题是您的 Fehlermeldung
link 按钮包含在 TemplateField
中,因此您不能像正常的 LinkButton
那样直接引用它。
您应该处理 GridView
的 RowDataBound
事件以通过其控件名称找到 link 按钮,并使用 RegisterPostBackControl()
(GridViewName
是您的网格视图 ID):
ASPX 标记
<asp:GridView ID="GridViewName" OnRowDataBound="GridViewName_RowDataBound" runat="server" ...>
<%-- gridview contents --%>
</asp:GridView>
代码隐藏
protected void GridViewName_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
// find link button first
LinkButton btn = e.Row.FindControl("Fehlermeldung") as LinkButton;
// use postback trigger assignment
ScriptManager.GetCurrent(Page).RegisterPostBackControl(btn);
}
}
参考:
Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed