簡體   English   中英

無法在 UpdatePanel 中下載文件

[英]Cannot Download file in UpdatePanel

下面的代碼可以讓我下載 Word 文檔.....

   Try
        Response.BufferOutput = True
        HttpContext.Current.Response.Clear()
        HttpContext.Current.Response.Charset = ""
        HttpContext.Current.Response.ContentType = "application/msword"
        HttpContext.Current.Response.AddHeader("Content-Disposition", "inline;filename=myfile.doc")
        HttpContext.Current.Response.Write(s)
        'HttpContext.Current.Response.End()
        HttpContext.Current.ApplicationInstance.CompleteRequest()
        HttpContext.Current.Response.Flush()
    Catch ex As Exception
        Response.Write(ex.Message)
    End Try

但是,一旦我添加了 UpdatePanel - 它就不會下載文件並且不會生成錯誤? 閱讀后,我添加了一個觸發器,其 ControlID 值設置為開始創建 Word 文檔文件的按鈕。 我嘗試了幾種代碼組合,但似乎沒有任何效果。 有關如何縮小范圍的任何幫助? 我也調試過,沒有錯誤顯示。 我檢查了我的下載文件夾 - 那里什么都沒有,嘗試不設置緩存(Response.Cache.SetCacheability(HttpCacheability.NoCache)),但沒有奏效。 一旦我刪除了 UpdatePanel 那么一切似乎都可以工作?

   <asp:UpdateProgress ID="ProgressUpdate" AssociatedUpdatePanelID="UpdatePanel1" runat="server">
        <ProgressTemplate>
            <img alt="progress" src="../images/loading.gif" />
        </ProgressTemplate>
    </asp:UpdateProgress>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
     <Triggers>
            <asp:PostBackTrigger ControlID="buttonDownloadFile" />
     </Triggers>
       <ContentTemplate>
        ..

完全失去了這一點。 任何人都可以提出解決方法或如何解決這個問題?

接受的答案是完全錯誤的。 您需要向腳本管理器注冊該控件。 我的在母版頁中,這是我用來注冊任何按鈕以進行正確回發的代碼。

private void MasterPageRegisterButtonForPostBack(Control bt)
        {
            MasterPage masterPage = Master;
            if (masterPage is MainMaster)
            {
                var mainMaster = masterPage as MainMaster;
                if (bt != null && mainMaster.MasterScriptManager != null)
                {
                    mainMaster.MasterScriptManager.RegisterPostBackControl(bt);
                }
            }
        }

我按以下方式工作:

在我的更新面板中,我配置了可能強制完整回發以使下載工作的控件。

(我也在使用母版頁,這與 Steve 的解決方案相同,但將其注冊在 aspx 中,而不是在后面的代碼中)

<asp:UpdatePanel runat="server" ID="UpdatePanelDownload" UpdateMode="Conditional" ChildrenAsTriggers="True">
  <ContentTemplate>
      <asp:LinkButton ID="LinkButtonDownload" OnClick="Download_Click" runat="Server">Save XML</asp:LinkButton>
 </ContentTemplate>
  <Triggers>
    <asp:PostBackTrigger ControlID="LinkButtonDownlod" />
  </Triggers>
</asp:UpdatePanel>

我不得不在另一個窗口中打開一個 ashx Generic Handler 並將一些會話變量傳遞給它,例如文件名、完整路徑等。

我是這樣做的

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
    <%foreach(var f in listOfObject){ %>
      <a class="btn btn-danger" href="javascript:__doPostBack('ctl00$BodyContent$butDownload', '<%=f.ID %>')" >Download</a>
    <%} %>
    </ContentTemplate>
</asp:UpdatePanel>  
    
<asp:LinkButton runat="server" ID="butDownload" OnClick="butDownload_Click" style="display:none;">LinkButton</asp:LinkButton>


///----Server-Side-----
    protected void butDownload_Click(object sender, EventArgs e)
    {
        string strID = Request["__EVENTARGUMENT"];
        if (!string.IsNullOrEmpty(strID))
        {
            int id = int.Parse(strID);
            //---Do what you want here
        }
    }

UpdatePanel 不支持文件上傳或下載。 有大量支持 ajax 的組件可以做到這一點,谷歌是你的朋友。

編輯: -

一些例子: -

http://forums.asp.net/t/1076322.aspx?How+to+create+a+flipcart+like+panel+for+showing+products+in+gridview - 我喜歡這種方法,他使用指向負責下載文件的頁面的 JavaScript。 在 UpdatePanel 內工作

http://encosia.com/ajax-file-downloads-and-iframes/ - 類似的方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM