2010-05-18 66 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中完成多少这一切,这一切取决于您希望用户体验的丰富程度。

相关问题