Загрузка файла MVC CSV + Project Awesome - PullRequest
5 голосов
/ 06 июня 2011

В настоящее время я использую проект потрясающий , чтобы открыть форму, которая запрашивает номер счета.

Я беру номер, генерирую CSV-файл и отправляю его в браузер:

string billcsv = "account_ref,line1,line2,line3"

var VIRFile = File(new System.Text.UTF8Encoding().GetBytes(billcsv), "text/csv", "billfor" + accnumber+ ".csv")

return Json(VIRFile);

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

Должен ли я сначала создать файл CSV на диске, а затем передать URL-адрес файла функции успеха и использовать window.open (url), или можно использовать javascript для воссоздания файла из результата json?

Json Результат:

{ "FileContents": [65,99,99,111,117,110,116,95,82,69,70,44,73,78,86,79,73,67,69,95,84,89,80,69,44 , 73,78,86,79,73,67,69,95,82,69,70,44,81,84,89,95,79,82,68,69,82,44,83,69,82 , 86,73,67,69,95,84,69,88,84,44,85,78,73,84,95,80,82,73,67,69,44,83,69,82,86 , 73,67,69,95,65,77,79,85,78,84,13,10,114,114,114,44,73,110,118,111,105,99,101,44,86,73,82,49,48,50,44,49,44 , 83,116,97,114,83,104,105,112,32,32,79,110,101,13,10,44,76,79,65,32,45,32,32,109,116,114,115,13,10,44,71,82,84,32,45,71 , 84,44,48,44,48,44,48,13,10,114,114,114,44,73,110,118,111,105,99,101,44,86,73,82,49,48,50,44,50,44,66,111,97,116,32 , 84,114,97,110,115,102,101,114,115,32,72,105,114,101,32,67,104,97,114,103,101,44,50,53,48,46,48,48,44,53,48,48,46,48,48,13,10,114,114,114,44,73,110,118,111,105 , 99,101,44,86,73,82,49,48,50,44,51,44,66,101,114,116,104,105,110,103,32,32,82,70,65,32,47,32,77,111,68,44,51,53 , 48,46,48,48,44,49,48,53,48,46,48,48,13,10], "ТипСодержимого": "текст / CSV", "FileDownloadName": "billfor123.csv"}

Ответы [ 2 ]

11 голосов
/ 06 июня 2011

Прежде всего, не используйте AJAX для загрузки файлов. Используйте обычную отправку формы или привязку, указывающую на действие контроллера, которое будет обслуживать файл. А потом в контроллере:

public ActionResult Download(string accnumber)
{
    string billcsv = "account_ref,line1,line2,line3";
    var data = Encoding.UTF8.GetBytes(billcsv);
    string filename = "billfor" + accnumber + ".csv";
    return File(data, "text/csv", filename);
}

Теперь, чтобы вызвать это действие и попросить пользователя загрузить, просто создайте ссылку:

@Html.ActionLink("Download csv", "Download", new { accnumber = "123" })

или если вы используете форму:

@Html.BeginForm("Download", "SomeController")
{
    @Html.TextBox("accnumber")
    <input type="submit" value="Download CSV" />
}
0 голосов
/ 23 марта 2015

Отправка формы с использованием AJAX имеет недостатки. Вы не должны делать это. Я бы предпочел использовать @ Html.BeginForm () помощник для генерации формы и отправки данных с помощью события кнопки.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...