MVC3导出到文件设计

时间:2011-09-23 23:33:37

标签: jquery asp.net-mvc-3

我有一个强类型视图,它使用ASP.NET MVC3显示模型。我想添加一个链接,以便用户可以将视图中显示的模型下载到CSV文件中。我认为链接会指向控制器上的另一个操作,该操作将模型作为参数。

最佳做法是什么?

  1. 我应该使用jQuery .post,Html.ActionLink等吗?
  2. 如何将视图上显示的模型传递回控制器?我读了一些让我觉得你无法将模型传回控制器的东西。我想另一种方法是从数据库中获取再次对模型进行水合的数据,但这意味着往返数据库。
  3. 将模型传递回控制器的另一种方法是将div元素传递回控制器。这可能不完全符合我的要求(而且看起来很糟糕)。
  4. 感谢您的投入!

2 个答案:

答案 0 :(得分:0)

您应该创建一个为CSV文件返回自定义ViewResult的操作方法。该方法可以接受用于返回显示操作方法的模型的相同参数并使用它检索模型(例如,从存储库中)并返回文件结果。

要实现该功能,您必须创建一个源自CsvFileResult的自定义System.Web.Mvc.FileResult类(它本身派生自System.Web.Mvc.ActionResult)。该类的构造函数应该使用您的模型,创建逗号分隔的输出并返回MIME类型 text / csv 的文件结果。

例如,您的Controller可能如下所示:

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 })

答案 1 :(得分:0)

您可以将模型存储为客户端上的json,然后回发并从那里转换为csv。