2010-05-18 83 views
0

我想創建一個頁面,允許用戶選擇他們想如何查看他們的數據 - 即彙總(支持分組),網格(支持分組),表格(支持分組),地圖,時間線,xml,json等。ASP.Net MVC:使用不同的佈局顯示相同的數據

現在,每個佈局可能會有不同的使用不同的視圖模型,它從一個通用的基類/視圖模型繼承。原因是每個佈局需要它所處理的對象結構不同(有些需要將其他層次結構設計爲更平坦的結構)。

每個佈局都會調用同一個存儲庫方法,每個佈局將支持相同的功能,即搜索和過濾(因此這些控件將在佈局之間共享)。主要的例外是排序只有網格和表格視圖需要支持。

現在我的問題是這個問題,人們認爲什麼是最好的方法。

  • 使用DisplayFor來處理不同類型的渲染?
  • 另外我該如何處理這些操作......我想我會使用一個動作,並傳入佈局類型,但是如何支持摘要,網格和表格視圖所需的分組。
  • 做我對待每個分組只是一個佈局類型
  • 又怎麼會從一個URL指向這項工作 - 千萬人的想法是支持這個佈局功能

乾杯 安東尼

模板

回答

0

從概念上講,視圖是負責處理數據顯示的MVC Web應用程序的一部分。所以,如果你想以不同的方式顯示數據,每個「顯示器」都有自己對應的aspx視圖最合理。

所有視圖模型都可以從相同的基本模型繼承。因此,例如,我們可能有四種模式和三個觀點:

public abstract class BaseViewModel {} 
public class GridViewModel : BaseViewModel {} 
public class TableViewModel : BaseViewModel {} 
public class SummaryViewModel : BaseViewModel {} 

GridViewPage<GridViewModel> 
TableViewPage<TableViewModel> 
SummaryViewPage<SummaryViewModel> 

每個視圖可以有不同的stylehsheets和JavaScript文件連接,所以你應該能夠使用DisplayFor,如果你願意的話,或者你可以手工創建佈局。

至於控制器,您可以創建一個操作方法,返回三個視圖中的任何一個,或者可以創建三個單獨的ActionResults,每個視圖一個。這裏是「單片」ActionResult:

public ActionResult PageViewResult(string pageType) 
{ 
    switch (pageType) 
    { 
     //define your cases, return your views and your models 
     //make sure to set a default 
    } 
} 

但是,你可以格式化路線,但你認爲合適。例如,通過上面的「monolithic」ActionResult,我們可以在Global中創建以下路線。asax文件:

routes.MapRoute(
     "FormattedViewPage", // Route name 
     "View/Page/{pageType}", // URL with parameters 
     new { controller = "ViewPageController", action = "PageViewResult", pageType = "grid" } // Parameter defaults 
    ); 

希望這會有所幫助。如果您有任何問題,請告訴我。

0

首先,如果它是相同的數據,那麼我會嘗試對所有視圖使用相同的模型,但根據用戶想要查看數據的方式使用不同的css或不同的aspx頁面/控件來渲染模型。

此外,您可能想要了解可以在JavaScript中完成多少這一切,這一切取決於您希望用戶體驗的豐富程度。

相關問題