我有一個asp/vb.net網絡應用程序,爲了與網站其他部分保持一致,我使用AJAX和我的控制按鈕從ascx中引發事件。客戶端單擊下載按鈕已被用於處理帳戶權限。在ajaxified頁面上下載到CSV
我的下載到CSV函數使用response.write,一旦我寫了AJAX輸出停止,但代碼仍然激活。
目前我正在編寫另一個un-ajaxed空白aspx做response.write它通過我的控制按鈕註冊的啓動腳本在一個新的選項卡/窗口中打開。
必須有更好的策略。有什麼想法嗎?
我有一個asp/vb.net網絡應用程序,爲了與網站其他部分保持一致,我使用AJAX和我的控制按鈕從ascx中引發事件。客戶端單擊下載按鈕已被用於處理帳戶權限。在ajaxified頁面上下載到CSV
我的下載到CSV函數使用response.write,一旦我寫了AJAX輸出停止,但代碼仍然激活。
目前我正在編寫另一個un-ajaxed空白aspx做response.write它通過我的控制按鈕註冊的啓動腳本在一個新的選項卡/窗口中打開。
必須有更好的策略。有什麼想法嗎?
我並不完全理解你說的所有內容,但是當我從過去的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;
}
儘可能接近,可悲的是,因爲的.ascx提高它插入到任何網頁的.aspx.vb處理的事件,獲得了ASCX裏面的具體的控制似乎並不可能。 – user314321
它發生,我認爲我應該分享我的解決方法,雖然它不是一個真正的答案。
我打開一個新的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但這是可以避免的。
當前在回發控制按鈕註冊一個啓動腳本來執行window.open我的下載到CSV函數傳遞一個字符串到response.write其中.ContentType設置爲文本/ csv – user314321