【问题标题】:How to let user download data to a file如何让用户将数据下载到文件
【发布时间】:2018-05-15 00:19:12
【问题描述】:

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

我正在使用 Asp.net core 2.1 rc1 MVC 应用程序。

我的狡猾计划是创建一个特殊的视图,它将数据呈现为制表符分隔的文本,并使用响应标题让浏览器下载它而不是显示 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/(只需单击下载链接并检查文件)

【问题讨论】:

  • 这不是错误消息。你在某处渲染它,也许是一些@Html.Raw(model) 或类似的东西。
  • 这可能不是错误消息,而是在某个对象上调用 ToString() 的结果。
  • 事情是 ToString 和 Html.Raw 工作得很好。一切都完美显示。
  • 嗯...发布整个文件,我们也许可以提供帮助
  • 好的,我会在 GitHub 上放一些东西

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


【解决方案1】:

你写了@Model,而正确的语法是@model(小写-区分大小写)。

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

【讨论】:

  • 非常感谢,完全错过了!仍然不确定为什么其他一切正常!?
【解决方案2】:

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

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

【讨论】:

  • 我真的不想返回文件。我所有的格式都是在视图中完成的。我可以轻松返回 Excel 文件或制表符分隔的文本文件。我想返回一个视图并让浏览器将其保存为文件。如果我要使用文件而不是文件,我想我必须在内存中创建文件并将其流式传输到文件中。这在视图中要容易得多。
猜你喜欢
  • 1970-01-01
  • 2016-11-27
  • 1970-01-01
  • 1970-01-01
  • 2019-05-03
  • 2012-01-01
  • 2021-03-04
  • 2019-09-29
  • 1970-01-01
相关资源
最近更新 更多