我想创建一个页面,允许用户选择他们想要查看他们的数据的方式 - 即摘要(支持分组),网格(支持分组),表格(支持分组),地图,时间线,xml,json等。
现在每个布局可能会有不同的使用不同的视图模型,它继承自公共基类/视图模型。原因是每个布局需要它处理的对象结构是不同的(有些需要分层其他布局更平坦的结构)。
每个布局都会调用相同的存储库方法,每个布局都支持相同的功能,即搜索和过滤(因此这些控件将在布局之间共享)。对此的主要例外是排序,只有网格和表格视图需要支持。
现在我的问题是人们认为这是最好的方法。
干杯 安东尼
答案 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
);
希望这会有所帮助。如果您有任何问题,请告诉我。