ASP.Net MVC:使用不同的布局显示相同的数据

时间:2010-05-18 02:34:51

标签: asp.net-mvc controls user-interface page-layout

我想创建一个页面,允许用户选择他们想要查看他们的数据的方式 - 即摘要(支持分组),网格(支持分组),表格(支持分组),地图,时间线,xml,json等。

现在每个布局可能会有不同的使用不同的视图模型,它继承自公共基类/视图模型。原因是每个布局需要它处理的对象结构是不同的(有些需要分层其他布局更平坦的结构)。

每个布局都会调用相同的存储库方法,每个布局都支持相同的功能,即搜索和过滤(因此这些控件将在布局之间共享)。对此的主要例外是排序,只有网格和表格视图需要支持。

现在我的问题是人们认为这是最好的方法。

  • 使用DisplayFor处理不同类型的渲染?
  • 另外我如何处理这些动作...我想我会使用一个动作,并传递布局类型,但那么它如何支持摘要,网格和表视图所需的分组。
  • 我是否将每个分组视为一种布局类型
  • 此外,从URL的角度来看,这将如何运作 - 人们认为支持此布局功能的模板是什么?

干杯 安东尼

2 个答案:

答案 0 :(得分:0)

首先,如果它是相同的数据,那么我会尝试对所有视图使用相同的模型,但是使用不同的css或不同的aspx页面/控件来渲染模型,具体取决于用户想要查看数据的方式。 / p>

此外,您可能希望了解在JavaScript中可以完成多少工作,这一切都取决于您希望用户体验的丰富程度。

答案 1 :(得分:0)

从概念上讲,View是MVC Web应用程序的一部分,负责处理数据的显示。因此,如果您想以不同的方式显示数据,那么每个“显示”都有自己对应的aspx视图似乎最合乎逻辑。

所有View Models都可以从相同的基本模型继承。因此,例如,我们可能有四个模型和三个视图:

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

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

每个视图都可以附加不同的样式表和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
    );

希望这会有所帮助。如果您有任何问题,请告诉我。