2011-09-23 26 views
0

我有一個使用ASP.NET MVC3顯示模型的強類型視圖。我想添加一個鏈接,以便用戶可以將視圖中顯示的模型下載到CSV文件中。我在想這個鏈接會指向控制器上的另一個動作,它將模型作爲參數。MVC3導出到文件設計

最佳做法是什麼?

  1. 我應該使用jQuery .post,Html.ActionLink等嗎?
  2. 如何將視圖上顯示的模型傳遞迴控制器?我讀了一些讓我覺得無法將模型傳回控制器的東西。我猜想另一種方法是從數據庫中再次獲取模型的數據,但這意味着要往返數據庫。
  3. 將模型傳遞迴控制器的另一種方法是將div元素傳遞迴控制器。這可能不會完全符合我的要求(而且看起來很詭異)。

感謝您的輸入!

回答

0

您應該創建一個操作方法,爲CSV文件返回自定義ViewResult該方法可以接受用於返回顯示操作方法的模型的相同參數,並使用它來檢索模型(例如從存儲庫),並返回文件結果。

要實現該功能,您必須創建一個從System.Web.Mvc.FileResult(本身來自System.Web.Mvc.ActionResult)派生的自定義CsvFileResult類。該類的構造函數應該使用您的模型,創建逗號分隔的輸出並返回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); 
    } 
} 

在客戶端,您可以輸出使用ActionLink helper方法和重載接受參數值的ExportCsvFile操作方法的鏈接:

@Html.Helper("ExportCsvFile", "Model", new { id = Model.ModelID }) 
0

您可以將模型存儲爲客戶端上的json,然後發回並從那裏轉換爲csv。