0

我有一个 asp/vb.net 网络应用程序,为了与网站的其他部分保持一致,我使用 AJAX 并且我的控制按钮从 ascx 引发事件。客户端单击下载按钮已被用于处理帐户权限。

我下载到 CSV 函数使用 response.write,一旦我编写了 AJAX,输出就会停止,尽管代码仍然会触发。

目前我正在编写另一个未处理的空白 aspx 来执行 response.write 它正在通过我的控制按钮注册的启动脚本在新选项卡/窗口中打开。

必须有更好的策略。有什么想法吗?

4

2 回答 2

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;
    }
于 2013-08-02T16:03:01.413 回答
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,但这是可以避免的。

于 2013-08-07T23:05:29.430 回答