2016-08-14 50 views
0

未被捕获的Sys.WebForms.PageRequestManagerParserErrorException:Sys.WebForms.PageRequestManagerParserErrorException:无法解析从服务器收到的消息。无法下载VB中的文件ASP.NET

当我单击下载按钮时出现此错误。

ASPX.cs

<asp:UpdatePanel runat="server" ID="UpdatePanelContent" UpdateMode="Conditional"> 
    <Triggers> 
     <asp:PostBackTrigger ControlID="btnupload" /> 
    </Triggers> 
    <ContentTemplate> 
     <asp:FileUpload runat="server" ID="FileUpload1" value="Upload" /> 
     <asp:Button ID="btnupload" runat="server" OnClick="button1_click" Text="Upload"></asp:Button> 
     <%-- <asp:LinkButton ID="OnLnkDownload" runat="server" OnClick="OnLnkDownload_Click" Font-Underline="False">Download</asp:LinkButton>--%> 
    </ContentTemplate> 
</asp:UpdatePanel> 
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" EmptyDataText="No files uploaded"> 
    <Columns> 
     <asp:BoundField DataField="Text" HeaderText="File Name" /> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:LinkButton ID="lnkDownload" Text="Download" CommandArgument='<%# Eval("Value") %>' runat="server" OnClick="DownloadFile"></asp:LinkButton> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:LinkButton ID="lnkDelete" Text="Delete" CommandArgument='<%# Eval("Value") %>' runat="server" OnClick="DeleteFile" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

代码

Protected Sub DownloadFile(ByVal sender As Object, ByVal e As EventArgs) 
    Dim filePath As String = CType(sender, LinkButton).CommandArgument 
    Response.ContentType = ContentType 
    Response.AppendHeader("Content-Disposition", ("attachment; filename=" + Path.GetFileName(filePath))) 
    Response.WriteFile(filePath) 
    Response.End() 
End Sub 

背后请帮助在那里我得到了?

回答

0

使您的下载按钮成为HttpHandler而不是LinkBut​​ton的真正链接。现在你的更新面板试图将客户端JavaScript中的文件响应解析为HTML或其他东西。即使它起作用,它仍然不如实际链接到文件的专用URL。

为此,请将HttpHanler添加到您的项目中。您将文件下载的代码放入处理程序的ProcessRequest方法中。

我们通过你传递它们在URL中的参数说/MyHandler.ashx?filePath=someFile和使用查询字符串属性,而不是CommandArgument。例如QueryString [“filePath”]。请注意,处理程序应检查适用的权限。在您的页面中,您使用HyperLink控件并将NavigateUrl设置为朝向您的处理程序的URL。您可以分别测试两个部件。首先通过在浏览器中输入URL来获得处理程序的工作和测试,然后在页面中为HyperLink生成适当的URL。

+0

你可以折叠你的答案,并告诉我,我该如何做到这一点? –

+0

现在更清楚了吗? – Stilgar