2013-08-06 34 views
1

的JavaScript加入我不是很熟練的ASP.NET和我試圖文件:在同一時間下載ASP.NET通過下載客戶端事件處理

    上一個aspx網站
  1. 更新UI元素
  2. 文件

我有這個JS功能:

function downloadURL(url) { 
      var hiddenIFrameID = 'hiddenDownloader', 
       iframe = document.getElementById(hiddenIFrameID); 
      if (iframe === null) { 
       iframe = document.createElement('iframe'); 
       iframe.id = hiddenIFrameID; 
       iframe.style.display = 'none'; 
       document.body.appendChild(iframe); 
      } 
      iframe.src = url; 
     }; 

,這個按鈕服務器控件:

<asp:Button runat="server" ID="Button1" Content="DOWNLOAD" OnClick="Button1_Click" /> 

在事件處理我只需撥打:

//更新UI

textBoxXY.Text = "Text after file download"; 

ClientScript.RegisterStartupScript(typeof(MyPage), "myDownloadKey", "downloadURL(" + ResolveUrl("~/MyDownloadHandler.ashx") + ");", true); 

你覺得這種做法的是什麼。它似乎工作,但...

+0

但它需要你到另一個網頁,還是?我需要做回發來更新UI元素。 –

+0

可能您不需要回發帖子,您可以創建參數以便在客戶端上下載哪個文件。但是,如果你需要發回帖子,那麼你可以直接發送他的文件,而不是重新加載頁面。 – Aristos

回答

0

所有必須做的MyDownloadHandler.ashx標題。如果你對你的處理器的ashx

HttpContext.Current.Response.ContentType = "application/octet-stream"; 
HttpContext.Current.Response.AddHeader("Content-Disposition", 
        "attachment; filename=" + SaveAsThisFileName); 

添加有這個標題,則瀏覽器將打開文件保存瀏覽器,而不是一個新的選項卡。

,你只需要使用JavaScript做的是

window.location = "MyDownloadHandler.ashx"; 

或只是一個簡單的鏈接。所以總結一下,你已經創建了很多不必要的代碼,並且你做了一個回發,這也不是必須的。

相對: What is the best way to download file from server
Error handling when downloading file from ASP.NET Web Handler (.ashx)

+0

好的,但我在哪裏設置textBoxXY.Text =「文件下載後的文本」; ?我將不得不在JavaScript中做所有這些事情然後..或? –

+0

@ PaN1C_Showt1Me是的,你可以在客戶端做到這一點 - 或者你可以做別人做的(我避免它)直接發回文件。或者在頁面渲染之後,您只需在腳本區域渲染'window.location =「MyDownloadHandler.ashx?id = 22」'。 – Aristos