用于显示数据的ASP.NET MVC通用视图

时间:2010-01-26 11:09:51

标签: asp.net-mvc

我正在开发一个涉及通过ASP.NET MVC应用程序公开许多数据实体(超过200个)的项目。 我不想为每个实体模式编写视图,我想知道是否有一种方法可以让一个通用视图显示不同的模型(例如,一个读取模型属性(元数据)的视图并生成一个HTML表来显示实体清单。

3 个答案:

答案 0 :(得分:4)

如果您只需要显示,则可以使用反射在几分钟内编写自己的通用渲染器。或者,您可以使用MvcContrib中的ModelVisualizer,或者来自MvcContrib的Grid,它可以执行Html.Grid(Model).AutoGenerateColumns()以自动将属性显示为列。它不支持DataAnnotations或属性,但您可以编写自己的扩展方法,该方法将使用反射基于某些属性生成Grid的列。您可以使用jqGrid的tableToGrid()方法快速将此网格转换为jqGrid。

如果您需要输入支持,可以选择以下几种方法:

  1. MvcContrib的InputBuilder(这里你可以看到一个关于如何用反射完成的简单例子)
  2. MVC v2 InputFor(),我认为它支持渲染多个属性,但我不确定。
  3. My solution会从视图模型中读取元数据(属性)并自动生成jqGrid格式和编辑选项。
  4. 也应该有商业工具。

答案 1 :(得分:2)

有两种选择:

动态数据项目

您是否尝试过可以自动创建所需内容的Asp.net Dynamic data项目?

Asp.net MVC

但是如果你想做你要问的事情,你总是可以创建一个没有强类型模型的单一视图。您将始终将数据传递给它ViewData字典。然后,视图将解析该数据并显示所需内容。

<强>路由
您始终可以创建这两条路线:

routes.MapRoute(
    "EntityRoute",
    "{entityName}",
    new {
        controller = "Entity",
        action = "Display",
        entityName = "SomeDefaultEntity" }
);

routes.MapRoute(
    "EntityRoute",
    "{entityName}/{recordId}",
    new {
        controller = "Entity",
        action = "Details",
        entityName = "SomeDefaultEntity",
        recordId = string.Empty }
);

将所有请求重定向到相同的控制器操作,该操作将提供正确的实体集数据并将其传递到ViewData字典并返回将使用它的视图。第二个将显示某个实体内某个记录的详细信息(如果您需要提供主/详细信息功能)。

答案 2 :(得分:0)

MVC Contrib有Model Visualizer,可以通过反映其属性来显示模型。如果你需要任何表现,那就不行了,但也许它会让你开始。