我有一个asp / vb.net网络应用程序,为了与网站的其余部分保持一致,我使用AJAX和我的控制按钮从ascx引发事件。客户端单击下载按钮已用于处理帐户权限。
我下载到CSV函数使用response.write,一旦我写了AJAX,输出就停止了,尽管代码仍然会触发。
目前我正在编写另一个未使用的空白aspx来执行response.write它是通过我的控制按钮注册的启动脚本在新的选项卡/窗口中打开的。
必须有更好的策略。有什么想法吗?
答案 0 :(得分: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;
}
答案 1 :(得分:1)
我觉得我应该分享我的解决方法,虽然这不是一个真正的答案。
我用一个简单的onclientclick =“myfunction”打开一个新的aspx
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或chrome / FF下载文件,并在屏幕下方的下载栏中显示下载的文件链接。如果自动打开文件名,有时会被excel覆盖。
适用于FF Chrome和IE 10-7
在我的情况下,弹出窗口阻止程序是一个问题,因为我首先执行一些表单,然后使用scriptmanager.registerstartupscript window.open,但这是可以避免的。