MVC3 Экспорт в Файловый Дизайн - PullRequest
0 голосов
/ 24 сентября 2011

У меня строго типизированное представление, отображающее модель с использованием ASP.NET MVC3.Я хочу добавить ссылку, чтобы пользователь мог загрузить модель, отображаемую в виде, в файл CSV.Я думал, что ссылка будет указывать на другое действие на контроллере, который принял модель в качестве аргумента.

Какая лучшая практика?

  1. Должен ли я использовать jQuery .post, Html.ActionLink и т. Д .?
  2. Как передать модель, которая отображаетсяна вид обратно к контроллеру?Я прочитал кое-что, что заставило меня думать, что вы не можете передать модель обратно контроллеру.Я полагаю, что альтернативой было бы получить данные, которые снова гидратировали модель из базы данных, но это означает, что туда и обратно отправляется база данных.
  3. Альтернативой передаче модели обратно в контроллер является передача divэлемент обратно к контроллеру.Возможно, это не совсем то, что я хочу (и кажется хакерским).

Спасибо за ваш вклад!

Ответы [ 2 ]

0 голосов
/ 24 сентября 2011

Вы можете сохранить модель как json на клиенте, затем отправить обратно и оттуда конвертировать в csv.

0 голосов
/ 24 сентября 2011

Вы должны создать метод действия, который возвращает пользовательский ViewResult для вашего CSV-файла. Этот метод может принять тот же параметр, который использовался для возврата модели для метода действия отображения и использовать его для получения модель (например, из репозитория) и вернуть результат файла.

Для реализации этой функциональности вам необходимо создать пользовательский класс CsvFileResult, производный от System.Web.Mvc.FileResult (который сам по себе происходит от System.Web.Mvc.ActionResult). Конструктор этого класса должен взять вашу модель, создать вывод через запятую и вернуть результат файла с типом MIME text / csv .

Например, ваш контроллер может выглядеть так:

public class ModelController : Controller
{
    private readonly IModelRepository _modelRepository;

    public DemoController(IModelRepository modelRepository)
    {
        _modelRepository = modelRepository;
    }

    public ActionResult Display(int id)
    {
        var model = _modelRepository.Retrieve(id);

        return View(model);
    }

    public FileResult ExportCsvFile(int id)
    {
        var model = _modelRepository.Retrieve(id);

        return new CsvFileResult(model);
    }
}

На клиенте можно вывести ссылку на метод действия ExportCsvFile, используя вспомогательный метод ActionLink и значения параметров, принимающих перегрузку:

@Html.Helper("ExportCsvFile", "Model", new { id = Model.ModelID })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...