Вы должны создать метод действия, который возвращает пользовательский 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 })