以下代码中的错误是什么,因为它没有显示SaveFileDialog

时间:2014-09-24 02:15:16

标签: c# asp.net .net export-to-excel savefiledialog

 protected void Export(DataTable dtUserList)
{
    try
    {
        DataTable dt = dtUserList;
        string attachment = "attachment; filename=ul.xls";
        Response.ClearContent();
        Response.AddHeader("content-disposition", attachment);
        Response.ContentType = "application/vnd.ms-excel";
        string tab = "";
        foreach (DataColumn dc in dt.Columns)
        {
            Response.Write(tab + dc.ColumnName);
            tab = "\t";
        }
        Response.Write("\n");
        int i;
        foreach (DataRow dr in dt.Rows)
        {
            tab = "";
            for (i = 0; i < dt.Columns.Count; i++)
            {
                Response.Write(tab + dr[i].ToString());
                tab = "\t";
            }
            Response.Write("\n");
        }
        Response.Flush();
        HttpContext.Current.ApplicationInstance.CompleteRequest();
    }
    catch (System.Threading.ThreadAbortException ex)
    {
        if (ex is System.Threading.ThreadAbortException)
            {
                System.Threading.Thread.ResetAbort();
                return ;
            }
    }
}

我正在将数据表导出到Excel文件中,但我必须使用SaveFileDialog根据用户保存文件。我正在使用Asp.Net。 我使用DataTable作为参数从另一个方法调用上面的方法。

1 个答案:

答案 0 :(得分:0)

你真的没有选择。它真的取决于浏览器,以及用户过去使用相同类型的文件所做的事情。由于您正在发送特定的应用程序类型,因此浏览器很有可能,好吧,这是一个excel文件,我会下载它或尝试打开它,因为我知道什么与它有关。

你可以尝试做一件事。使用不同的内容类型。请尝试使用以下内容:

Response.ContentType = "application/octet-stream";

由于浏览器不知道该如何处理,因此不太可能试图找出可以用来自动打开它的程序。

除此之外,你真的没有什么可以做的。您无法控制保存文件对话框,也不应该。如果我们对它有任何控制权,即使强迫它显示,也会导致我们不想要的安全漏洞,也不会导致用户。