2010-04-29 58 views
0

我在aspx頁面的鏈接,當我點擊它,它顯示了一個彈出:打開,保存,取消問題,當我點擊取消

,但是當我點擊aspx頁面沒有其他關於取消鏈接在該頁面上工作。

到目前爲止的代碼:

protected void method1() 
{ 
      byte[] byterendered = _Filename.OpenBinary(); 
      Response.Clear(); 
      Response.ClearHeaders(); 
      Response.ClearContent(); 
      Response.ContentType = "image/jpeg"; 
      Response.AddHeader("Content-Disposition", "attachment;filename=abc.jpg"); 
      Response.CacheControl = "Public"; 
      Response.BinaryWrite(byterendered); 
      Response.End(); 
} 

ASPX代碼

<asp:Linkbutton id="link1" runat="server" onClick="method1" Text="LinkA"/> 
<asp:Linkbutton id="link2" runat="server" onClick="method2" Text="LinkB" /> 
+0

你什麼時候調用這段代碼?你有沒有考慮在新窗口中打開文件? – Kobi 2010-04-29 11:50:44

+0

你可以發佈ASPX代碼嗎? – Prutswonder 2010-04-29 11:51:06

+0

@Kobi:當你說在新窗口中打開文件時,你的意思是什麼。現在,當我打開文件它顯示彈出窗口,所以你的意思,而不是它應該有新的窗口? @Prustswonder:我在 – Ryan 2010-04-29 13:34:38

回答

0

至於你的問題的評論所指出的,其原因是因爲正在結束的響應文件對話框顯示出來後。一旦迴應結束,您網頁上的任何其他操作都不會被註冊。我在爲我的SharePoint應用程序實現下載功能時自己遇到了這個問題。

基本上,你想要做的是讓你的鏈接按鈕執行一個窗口打開腳本,而不是直接運行文件傳輸,如下所示。

<asp:LinkButton id="link1" runat="server" onClick="window.open('TARGETURL'); return false;" Text="LinkA" /> 

TARGETURL替換爲aspx頁面的URL。然後,爲您指定的網址創建一個新的ASPX頁面。它幾乎是空的,你需要的只有兩行。

<%@ Assembly Name="YOURFOURPARTASSEMBLYSTRINGHERE" %> 
<%@ Page Language="C#" Inherits"YOURNAMESPACE.DOWNLOADCODE" %> 

更換YOURFOURPARTASSEMBLYSTRINGHERE用,當然,這四個零件組件字符串代碼。 YOURNAMESPACE.DOWNLOADCODE將替換爲您將爲頁面創建的名稱空間和類。該類將需要繼承基本頁面類型,我個人使用LayoutsPageBase,因爲這是在SharePoint應用程序中使用的完美之物。所有這個類需要的是像下面這樣的OnLoad方法。

// Don't actually name your class DOWNLOADCODE. 
public class DOWNLOADCODE : LayoutsPageBase 
{ 
    protected override void OnLoad(EventArgs e) 
    { 
     byte[] byterendered = _Filename.OpenBinary(); //More on this afterwards 
     Response.Clear();  
     Response.ClearHeaders();  
     Response.ClearContent();  
     Response.ContentType = "image/jpeg";  
     Response.AddHeader("Content-Disposition", "attachment;filename=abc.jpg");  
     Response.CacheControl = "Public";  
     Response.BinaryWrite(byterendered);  
     Response.End(); 
    } 
} 

當然,您將不得不在這個新頁面中檢索_Filename。做到這一點的最好方法是首先採用您用來確定_Filename的任何參數,並將其作爲URL查詢字符串的一部分傳遞。

點擊鏈接按鈕將打開一個新窗口,但由於所有頁面都有文件響應,它只會打開文件對話框並完成它。同時,你原來的aspx頁面不會結束它的響應,所以它可以繼續任何你需要的功能。