2012-05-28 30 views
2

我打開某些面板有一些像這樣的代碼爲什麼下載文件不工作保存在模型彈出?

<td rowspan="2"> 
         <br /> 
         <asp:UpdatePanel ID="updatePnl" runat="server"> 
          <ContentTemplate> 
           <asp:LinkButton ID="lnkYurLevel" runat="server" ForeColor="#009999" Text="What are my next steps?" 
            Font-Size="Medium" OnClick="lnkYurLevel_Click"></asp:LinkButton> 
          </ContentTemplate> 
         </asp:UpdatePanel> 
        </td> 

protected void lnkYurLevel_Click(object sender, EventArgs e) 
    { 
     if (lblFileName.Text != "") 
     { 
      string path = Server.MapPath(@"~\downloads\" + lblFileName.Text); 
      System.IO.FileInfo file = new System.IO.FileInfo(path); 
      if (file.Exists) 
      { 
       Response.Clear(); 
       Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name); 
       Response.AddHeader("Content-Length", file.Length.ToString()); 
       Response.ContentType = "application/octet-stream"; 
       Response.WriteFile(file.FullName); 
       Response.End(); 
      } 
      else 
      { 
       Response.Write("This file does not exist."); 
      } 
     } 

    } 

和按鈕點擊我正在打開一個文件,該文件是要下載但下載不會出現,因爲它是在不保存在工作通過模型彈出的面板。 現在,當它被放置在要通過模型彈出時打開的面板中。它不起作用。 是什麼原因?

+0

文件被創建,但保存對話框永遠不會出現在客戶端上。 – NoviceToDotNet

回答

2

UpdatePanel內部的操作不會改變整個Response,只是頁面的一部分。所以你不能指望Response.Write工作。另一種方法是使按鈕強制完整PostBack


添加 PostBackTriggerasp:Button這樣

<Triggers> 
    <asp:PostBackTrigger ControlID="lnkYurLevel" /> 
</Triggers> 

,或者如果你想要做的是,在代碼隱藏,做到這一點。

ScriptManager.GetCurrent(Page).RegisterPostBackControl(lnkYurLevel); 
+0

是的,它可以工作,但我的問題是我必須定義觸發器,而當我沒有定義觸發器時,觸發點被擊中。 – NoviceToDotNet

+1

@NoviceToDotNet:第一行用簡單的術語解釋原因。不是嗎? – naveen

+0

@Aristos:對不起。我希望它有人只是點擊快樂:) – naveen

2

您使用的UpdatePanel,期望非常具體的數據(實際上等待結果的結果)從回發,並且這些數據在javascript上用於更新他的內容。你所做的是徹底打破這些數據,你仍然期望工作。這不能工作,你從該頁面,從更新面板得到一個JavaScript錯誤。換句話說,更新面板從您那裏獲取一些不知道如何處理它們的數據。

+0

所以如何使它正確,文件被創建,但保存對話框永遠不會出現在客戶端上。 – NoviceToDotNet

+0

@NoviceToDotNet是的,因爲你有它的UpdatePanel。 – Aristos

+0

@NoviceToDotNet我喜歡說這種方式也不是很好的做法,是一個簡單的解決方案,但不是一個asp.net頁面的正確解決方案。更好的解決方案是使用句柄來發送文件,並且只需使用正確的url參數創建到該句柄的鏈接即可。 – Aristos

相關問題