【问题标题】:ASP.Net MVC: Showing the same data using different layoutsASP.Net MVC:使用不同的布局显示相同的数据
【发布时间】:2010-07-04 21:00:08
【问题描述】:

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

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

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

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

  • 使用 DisplayFor 处理不同类型的渲染?
  • 另外,我如何使用这些操作... .
  • 我是否将每个分组仅视为一种布局类型
  • 另外,从 URL 的角度来看,这将如何工作 - 人们认为支持此布局功能的模板是什么

干杯 安东尼

【问题讨论】:

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


    【解决方案1】:

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

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

    public abstract class BaseViewModel {}
    public class GridViewModel : BaseViewModel {}
    public class TableViewModel : BaseViewModel {}
    public class SummaryViewModel : BaseViewModel {}
    
    GridViewPage<GridViewModel>
    TableViewPage<TableViewModel>
    SummaryViewPage<SummaryViewModel>
    

    每个视图都可以附加不同的样式表和 javascript 文件,因此您应该可以根据需要使用 DisplayFor,或者您可以手动创建布局。

    对于控制器,您可以创建一个操作方法来返回三个视图中的任何一个,或者您可以创建三个单独的 ActionResult,每个视图一个。这是“单片”ActionResult:

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

    您可以按照您认为合适的方式格式化路线。例如,使用上面的“整体”ActionResult,我们可以在 Global.asax 文件中创建以下路由:

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

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

    【讨论】:

      【解决方案2】:

      首先,如果它是相同的数据,那么我会尝试对所有视图使用相同的模型,但根据用户想要查看数据的方式使用不同的 css 或不同的 aspx 页面/控件来呈现模型。

      您可能还想了解在 JavaScript 中可以完成多少此操作,这完全取决于您希望用户体验的丰富程度。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-13
        • 1970-01-01
        • 2012-10-10
        • 2014-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多