将数据集导出到Excel并从asp.net Web方法引发文件下载对话框

时间:2010-08-06 16:39:26

标签: asp.net excel dataset webmethod

我使用以下代码将数据集导出到Excel工作表。

[WebMethod]
    public static void ExporttoExcel()
    {
        DataSet ds;
       productfactory pf=new productfactory();
        ds = pf.getproducts();
        HttpResponse response = HttpContext.Current.Response;

        // first let's clean up the response.object
        response.Clear();
        response.Charset = "";
        response.ContentEncoding = System.Text.Encoding.Default;

        // set the response mime type for excel
        response.ContentType = "application/vnd.ms-excel";
        response.AddHeader("Content-Disposition", "attachment;filename=\"products.xls\"");

        // create a string writer
        using (StringWriter sw = new StringWriter())
        {
            using (HtmlTextWriter htw = new HtmlTextWriter(sw))
            {
                // instantiate a datagrid
                DataGrid dg = new DataGrid();                    
                dg.DataSource = ds.Tables[0];
                dg.DataBind();
                dg.RenderControl(htw);
                string filepath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\products.xls";                    
                response.Write(sw.ToString());
               // response.End();

            }
        }       
    }

问题是它没有提高文件下载,因此没有出口。相同的代码在普通方法中工作正常。但是使用网络方法它无法正常工作。

3 个答案:

答案 0 :(得分:2)

我建议将一个HttpHandler以ashx结尾,并在其中放置您创建excel文件的代码。

然后从你的javascript代码中调用它。

document.location.href = "ExporttoExcel.ashx";

答案 1 :(得分:1)

问题在于WebMethods的设计并不允许您与Response对象进行交互(很明显,它不可用,您必须使用HttpContext.Current.Response来实现它)。 WebMethods被设计为用户的黑盒子。他们将执行和操作和/或返回值。

也许你可以让我们更好地了解你想要完成的事情,我们可以建议一个替代解决方案。

答案 2 :(得分:-1)

您可以使用创建动态iframe,并将URL设置为Web处理程序以生成Excel,这将提升文件下载而不发布当前页面。