如何让用户将数据下载到文件中

时间:2018-05-13 21:51:53

标签: c# razor asp.net-core-mvc

我想让用户下载我在网站其他地方显示的数据作为报告。

我使用的是Asp.net核心2.1 rc1 MVC app。

我的狡猾计划是创建一个特殊视图,将数据呈现为制表符分隔文本,并使用响应标题使浏览器下载而不是显示HTML。这几乎完美无缺。

我的" HttpGet"控制器中的代码如下所示:

 Response.Headers.Add("Content-disposition", "attachment; filename=export.tsv");
 return View(MyModel);

我的剃刀视图如下:

@Model IEnumerable<MyModel>
@{
     Layout = null;
     String LineBreak = Environment.NewLine;
     String Tab = "\t";
}

Header1 Header2 ...

    @if (Model.Count > 0)
    {
        foreach (MyModel myModel in Model)
        {
            @myModel.Field1@Html.Raw(@Tab)@myModel.Field2 ... @Html.Raw(@LineBreak)
        }
    }

这非常有效,除了这个丑陋的错误消息显示为文件中的第一行:

System.Collections.Generic.List`1[MyApp.Models.MyModel] IEnumerable<MyModel>

文件的其余部分正是我所需要的。

有谁知道如何删除此邮件?或者如果我的一般方法有问题......

此处提供完整项目:https://github.com/under3415/ExportError/(只需点击下载链接并检查文件)

2 个答案:

答案 0 :(得分:1)

您已撰写@Model,而正确的语法为@model(小写 - 它区分大小写)。

第一行@model指令指定模型类型。 @Model取消引用实际的模型实例。您所看到的是ToString代表。

答案 1 :(得分:0)

您收到此错误是因为您使用模型返回视图(MyModel); 返回视图,您应该使用 FileResult

以下是完整的说明 Download file of any type in Asp.Net MVC using FileResult?