2016-08-14 110 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