Как разрешить пользователю загружать данные в файл - PullRequest
0 голосов
/ 14 мая 2018

Я хочу разрешить пользователю загружать данные, которые я отображаю в других местах на сайте, в виде отчетов.

Я использую приложение 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/ (просто нажмите на ссылку для скачивания и изучите файл)

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Вы написали @Model, в то время как правильный синтаксис - @model (строчные - чувствительны к регистру).

Директива @model в первой строке определяет тип модели.@Model разыменовывает фактический экземпляр модели.То, что вы видите, это ToString представление.

0 голосов
/ 14 мая 2018

Вы получаете эту ошибку, потому что вы возвращаете представление с моделью return View (MyModel); , вы должны использовать FileResult

Вот полные инструкции Загрузить файл любого типа в Asp.Net MVC, используя FileResult?

...