c# - 强制回发 Asp.Net

标签 c# asp.net vb.net

请看下面的点击事件...

 Protected Sub btnDownloadEmpl_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnDownloadEmpl.Click
        Dim emplTable As DataTable = SiteAccess.DownloadEmployee_H()
        Dim d As String = Format(Date.Now, "d")
        Dim ad() As String = d.Split("/")
        Dim fd As String = ad(0) & ad(1)
        Dim fn As String = "E_" & fd & ".csv"
        Response.ContentType = "text/csv"
        Response.AddHeader("Content-Disposition", "attachment; filename=" & fn)
        CreateCSVFile(emplTable, Response.Output)
        Response.Flush()
        Response.End()
        lblEmpl.Visible = True
    End Sub

此代码只是将数据从数据表导出到 csv 文件。这里的问题是 lblEmpl.Visible=true 永远不会被击中,因为这段代码不会导致回发到服务器。即使我将代码行 lblEmpl.Visible=true 放在点击事件的顶部,该行执行正常,但页面永远不会更新。我怎样才能解决这个问题?

最佳答案

这一行:

lblEmpl.Visible = True

永远不会被击中,因为这条线:

Response.End()

抛出一个ThreadAbortException

我认为处理此问题的更简洁方法是创建一个简单的 HttpHandler 组件,并在弹出窗口中“打开”它。 (弹出窗口实际上不应该打开。在大多数情况下,浏览器会意识到它实际上是一个下载,并且会抑制选项卡/窗口。)

研究IHttpHandler 接口(interface)。它们实际上很容易实现。

这是一个示例处理程序。抱歉,花了一些时间,我被叫去开会:

public class CensusHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        string fileName = String.Format(
            CultureInfo.CurrentUICulture,
            "E_{0:00}{1:00}.csv",
            DateTime.Today.Month,
            DateTime.Today.Day
            );

        context.Response.ContentType = "text/csv";
        context.Response.AddHeader(
            "Content-Disposition", String.Format(null, "attachment; filename={0}", fileName)
            );

        //Dump the CSV content to context.Response

        context.Response.Flush();
    }

    public bool IsReusable { get { return false; } }
}

好的,尝试添加一个 javascript onclick 事件来触发下载:

<asp:Button ID="Clickety" runat="server" Text="Click Me!" OnClick="Clickety_Click"
    OnClientClick="window.open('Handler.ashx', 'Download');" />

常规 OnClick 事件将触发您的回发代码。 javascript onclick (OnClientClick) 事件将通过 HttpHandler 启动下载。

关于c# - 强制回发 Asp.Net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2820161/

相关文章:

c# - 仅在特定时间运行一次 azure 函数?

asp.net - "Unable To Connect To Any Of The Specified MySQL Hosts"

c# - .NET - 自定义类型可能吗?

c# - 在 XP 中写入注册表 (HKEY_LOCAL_MACHINE)

c# - 将通用列表传递给 ObservableCollection 构造函数

c# - 从非异步方法调用异步方法

c# - 重置按钮在 asp.net 中不起作用

c# - 即使文件存在于我的路径中,File.Exist 条件在 asp.net 中不起作用

c# - 如何在 IntelliSense 中对 Visual Studio 中的函数进行注释?

sql-server - 触发器与存储过程