我在Gridview
内使用UpdatePanel
。在该Gridview
中,我为LinkButton
使用了imageButton
(我对CommandArgument
有同样的问题),并在用户单击时尝试下载pdf文件。
在UpdatePanel
中运行Button是很棘手的,但是一切似乎都很好。用户单击按钮,我将得到带有CommandArgument
的正确ID。使用此ID,我尝试Response
pdf文件,但收到错误:
0x800a139e-JavaScript运行时错误:Sys.WebForms.PageRequestManagerParserErrorException:无法解析从服务器收到的消息。
pdf文件在服务器上,在UpdatePanel
外面有一个按钮,我得到了正确的pdf文件。那么,为了使它在UpdatePanel
内部运行,我需要更改什么?谢谢
Gridview:
<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();
}
答案 0 :(得分:1)
问题是您的Fehlermeldung
链接按钮包含在TemplateField
中,因此您不能像普通LinkButton
那样直接引用它。
您应该处理RowDataBound
的{{1}}事件,以其控件名称查找链接按钮,并使用GridView
以编程方式在此放置按钮回发触发器(RegisterPostBackControl()
是您的网格查看ID):
ASPX标记
GridViewName
背后的代码
<asp:GridView ID="GridViewName" OnRowDataBound="GridViewName_RowDataBound" runat="server" ...>
<%-- gridview contents --%>
</asp:GridView>
参考: