Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 导出到Excel不工作_C#_Asp.net_Asp.net Mvc_Angularjs_Excel - Fatal编程技术网

C# 导出到Excel不工作

C# 导出到Excel不工作,c#,asp.net,asp.net-mvc,angularjs,excel,C#,Asp.net,Asp.net Mvc,Angularjs,Excel,使用AngularJS和ASP.NET MVC导出到可下载的Excel内容时遇到一些问题。我的最终结果是什么都没发生 ASP.NET控制器方法示例: [HttpPost] public ActionResult ExportToExcel(Model form) { var gv = new GridView(); gv.DataSource = _service.getSomeStuff(form); gv.DataBind(); Response.ClearC

使用AngularJS和ASP.NET MVC导出到可下载的Excel内容时遇到一些问题。我的最终结果是什么都没发生

ASP.NET控制器方法示例:

[HttpPost]
public ActionResult ExportToExcel(Model form)
{
    var gv = new GridView();
    gv.DataSource = _service.getSomeStuff(form);
    gv.DataBind();
    Response.ClearContent();
    Response.Buffer = true;
    Response.AddHeader("content-disposition", "attachment; filename=Stuff.xls");
    Response.ContentType = "application/ms-excel";
    Response.Charset = "";
    var sw = new StringWriter();
    var htw = new HtmlTextWriter(sw);
    gv.RenderControl(htw);
    Response.Output.Write(sw.ToString());
    Response.Flush();
    Response.End();

    byte[] temp = System.Text.Encoding.UTF8.GetBytes(sw.ToString());
    return File(temp, "application/ms-excel");
}
角度控制器方法:->通过ng点击处理程序触发

function exportToExcel() {
    $http.post('/Controller/ExportToExcel/', vm.Model)
           .success(function (data) {
           })
           .error(function (data) {
                alerts.error(data);
            });
}
视图:



有没有关于我做错了什么的建议?

我做过类似的事情,不需要AJAX或任何JS。调整Razor代码就是所需的全部

其次,我个人的建议是根本不要转换成Excel文件。原因是,用户需要在其本地计算机上拥有Office。这也意味着,如果您将项目上传到网站,服务器机器将需要安装Office才能生成excel文件

也就是说,我建议只使用CSV文件。如果用户安装了Office,他们将能够像查看任何电子表格一样使用Excel查看文件

下面是一些代码,这些代码将使用
StringBuilder
Reflection
从dbcontext中的dbset创建一个名为Export.CSV的CSV

public ActionResult Export()
    {
        StringBuilder str = new StringBuilder();
        var tmp = db.Users.FirstOrDefault();     
        Type comp = tmp.GetType();                // get type
        foreach (PropertyInfo prop in comp.GetProperties())
        {
            str.Append(prop.Name + ",");          //set column names
        }
        str.Replace(",", "\n", str.Length - 1, 1);
        foreach (object item in db.Users)
        {
            foreach (PropertyInfo prop in item.GetType().GetProperties())
            {
                try
                {
                    string a = prop.GetValue(item, null).ToString();
                    str.Append(a + ",");
                }
                catch (NullReferenceException)
                {
                    str.Append("null" + ",");           //for nulls, append string with "null"
                }
            }
            str.Replace(",", "\n", str.Length - 1, 1);
        }
        string csv = str.ToString();
        return File(new System.Text.UTF8Encoding().GetBytes(csv), "text/csv", "Export.csv");
    }
然后,您可以通过视图上的链接访问并下载该文件,如下所示:

<a href="@Url.Action("Export", "Controller")">click me</a>


希望这有帮助。

在返回文件之前,您正在调用
Response.End()
。我想这会导致issues@user167698,使用
Response.ClearContent();Response.Buffer=true;AddHeader(“内容处置”、“附件;文件名=Stuff.xls”);Response.ContentType=“应用程序/ms excel”;响应。Charset=“”;var sw=新的StringWriter();var htw=新的HtmlTextWriter(sw);gv.渲染控制(htw);Response.Output.Write(sw.ToString());Response.Flush();Response.End()
or
byte[]temp=System.Text.Encoding.UTF8.GetBytes(sw.ToString());返回文件(临时“应用程序/ms excel”)。不要两者都使用。不幸的是,我尝试了使用和不使用响应。End()。结果没有差别。如果从标准表单submit调用“ExportToExcel(Model form)”方法,则该方法似乎也会生成下载。函数ExportToExcel(){$http.post('/Controller/ExportToExcel/',Model)。成功(函数(数据){var element=angular.element('');element.attr({href:'data:application/ms excel;charset=utf-8',+encodeURI(数据),目标:''u blank',下载:'file.xslt'}[0]。单击();})。错误(函数(数据){alerts.error(数据);});}
<a href="@Url.Action("Export", "Controller")">click me</a>