0

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

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

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

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

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

干杯安东尼

4

2 回答 2

0

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

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

于 2010-05-18T02:56:56.583 回答
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>

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

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

于 2010-05-18T06:59:54.403 回答