2016-08-14 2 views
0

未知のSys.WebForms.PageRequestManagerParserErrorException:Sys.WebForms.PageRequestManagerParserErrorException:サーバーから受信したメッセージを解析できませんでした。VB ASP.NETでファイルをダウンロードできません

ダウンロードボタンをクリックするとこのエラーが発生します。私が間違って取得していますどこ

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 

の後ろ

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> 

コードを助けてください?

答えて

0

ダウンロードボタンをLinkBut​​tonではなくHttpHandlerへの真のリンクにします。現在、更新パネルは、クライアントJavaScriptのファイルレスポンスをHTMLなどで解析しようとします。それがうまくいっても、ファイルの専用URLへの実際のリンクよりも劣っています。

これを行うには、プロジェクトにHttpHanlerを追加します。ハンドラのProcessRequestメソッドにファイルダウンロードのコードを記述します。

は今/MyHandler.ashx?filePath=someFileを言うあなたがURLに渡す引数を渡す代わりに、CommandArgumentののQueryStringプロパティを使用します。たとえば、QueryString ["filePath"]です。ハンドラは、適切なアクセス許可が適用されているかどうかを確認する必要があります。あなたのページでは、HyperLinkコントロールを使い、NavigateUrlをあなたのハンドラに向かうURLに設定します。両方の部分を別々にテストすることができます。まず、ハンドラーを動作させ、ブラウザーにURLを入力してテストしてから、HyperLinkのページに適切なURLを生成します。

+0

あなたは答えを崩してどうすればいいのか教えてください。 –

+0

今はっきりしていますか? – Stilgar

関連する問題