2013-08-02 33 views
0

我有一個asp/vb.net網絡應用程序,爲了與網站其他部分保持一致,我使用AJAX和我的控制按鈕從ascx中引發事件。客戶端單擊下載按鈕已被用於處理帳戶權限。在ajaxified頁面上下載到CSV

我的下載到CSV函數使用response.write,一旦我寫了AJAX輸出停止,但代碼仍然激活。

目前我正在編寫另一個un-ajaxed空白aspx做response.write它通過我的控制按鈕註冊的啓動腳本在一個新的選項卡/窗口中打開。

必須有更好的策略。有什麼想法嗎?

+0

當前在回發控制按鈕註冊一個啓動腳本來執行window.open我的下載到CSV函數傳遞一個字符串到response.write其中.ContentType設置爲文本/ csv – user314321

回答

2

我並不完全理解你說的所有內容,但是當我從過去的AJAX控件中完成下載時,我不得不將下載按鈕設置爲完整的回發控件。您可以從ASPX/ASCX做到這一點,或者你可以做到這一點編程方式是這樣的:

 // The export button needs to do a full postback, regardless of whether we're in an 
     // AJAX UpdatePanel. 
     var updatePanel = GetParentUpdatePanel(); 
     if (updatePanel != null) 
     { 
      var scriptManager = ScriptManager.GetCurrent(Page); 
      if (scriptManager != null) 
      { 
       scriptManager.RegisterPostBackControl(exportButton); 
      } 
     } 

... 

    [CanBeNull] 
    private UpdatePanel GetParentUpdatePanel() 
    { 
     Control parent = Parent; 
     while (parent != null) 
     { 
      if (parent is UpdatePanel) 
      { 
       return (UpdatePanel) parent; 
      } 
      parent = parent.Parent; 
     } 
     return null; 
    } 
+0

儘可能接近,可悲的是,因爲的.ascx提高它插入到任何網頁的.aspx.vb處理的事件,獲得了ASCX裏面的具體的控制似乎並不可能。 – user314321

1

它發生,我認爲我應該分享我的解決方法,雖然它不是一個真正的答案。

我打開一個新的aspx用一個簡單的OnClientClick =「myfunction的」

 function myfunction() { 
       window.open('downloader.aspx?variable=something', '','width=400,height=200'); 
     } 

那麼頁面加載飼料的查詢字符串到我的下載功能像

下載(的Request.QueryString(「變量」 ))

和下載現在可以使用

Response.Clear() 
    Response.ContentType = "text/csv" 
    Response.AddHeader("Content-Disposition", "filename=myFileName) & ".csv") 

然後我用一個字符串生成器寫出一個頭和我的CSV像

stringBuilder.Append("My Explainitory Header" & vbCrLf) 
stringBuilder.Append("column 1 Header, column 2 header" & vbCrLf) 
for each record in table 
    stringBuilder.append(value1 & "," & value2 & vbCrLf) 
next 
response.write(StringBuilder.toString) 
response.end() 
response.clear() 

清晰的是要防止輸出到網頁以及下載。結果取決於瀏覽器設置,但其無論是保存/打開提示開啓自動到Excel或鉻/ FF下載文件,並顯示您在底部的屏幕下載欄下載的文件的鏈接。如果自動打開,文件名有時會被excel覆蓋。

在FF Chrome和IE 10-7

在我的情況下彈出窗口攔截器是一個問題,因爲我第一次,然後做一些形式的東西scriptmanager.registerstartupscript的window.open但這是可以避免的。