带有Razor的ASP.NET MVC 3可重用表格显示模板

时间:2011-03-02 20:07:05

标签: c# asp.net-mvc-3 razor

使用新的Razor语法在ASP.NET MVC3中创建表格显示模板是否有好方法?

在ASP.NET MVC 2中,Phil Haack写了关于tabular display templates的博客。 ASP.NET MVC3中有更好的方法吗?

编辑:

是否也可以在模型元数据的基础上渲染网格?因此,我不想使用WebGrid API手动定义列,而是使用模型元数据。我看到的问题是,您每次都必须使用WebGrid API手动定义表。我想有可能拥有一种可重复使用的表格。

编辑: 那么使用模型元数据创建网格有什么好的做法吗?

7 个答案:

答案 0 :(得分:7)

您可以在MVC3中使用新的WebGrid:

@{
    var grid = new WebGrid(Model);
    @grid.GetHtml();
}

您可以使用jQuery标签http://jqueryui.com/demos/tabs来创建标签页。

对不起,如果我误解了你的问题。

答案 1 :(得分:1)

我没有太多使用它,但根据我的理解,你必须首先设置MVC 3的WebGrid才能使用它。并且您不希望在视图中设置表,而是使用模型属性来设置它。

如果我在哪做,我会做以下事情:

  • 创建我的自定义属性,我将用它来装饰我的模型,以定义哪些属性是列,将用于列标题的标签以及您要配置的任何其他内容。

  • 我将使用静态方法创建一个静态类,该方法接收模型实例,使用反射来读取属性和自定义属性,然后它会吐出WebGrid供您在视图中使用。

这就是怎么回事,但我会告诉你为什么我不这样做:在MVC中,你装饰你的模型,比如验证,这很棒,很有说服力。但是当你定义一个网格时,这是一个特定于视图的东西。当然,您可能正在使用视图特定的ViewModel,但我不认为表格布局配置属于模型。 WebGrid或Telerik的Grid在它工作之前的方式已经很好地声明了。

我简短的WebGrid和Telerik的Grid已经在使用最佳实践,它提供了声明性的,流畅的接口来定义表结构和行为。每个表都不同,因此您定义每个表是有意义的。你说“手工”但这远非如此,因为网格正在为你做所有肮脏的工作,你只是告诉它你想要什么(声明式编程)。

答案 2 :(得分:0)

您可以查看new WebGrid helper

答案 3 :(得分:0)

您也可以考虑使用telerik网格和tabstrip MVC组件,检查their demos

答案 4 :(得分:0)

我很喜欢jQuery templates。您只需要传递JSON对象,然后完成剩下的工作。适合分类,分页等。

答案 5 :(得分:0)

菲尔·哈克(Phil Haack)撰写了一篇关于模板化剃刀代表(Templated Razor Delegates)的非常酷的博客文章他写的html助手简单轻巧。

http://haacked.com/archive/2011/02/27/templated-razor-delegates.aspx

答案 6 :(得分:0)

刚刚找到这个答案寻找类似的解决方案。我也希望能有一些可重复使用的东西,所以最终创建了一个基于卡尔曼答案的简单模板,它看起来像这样:

查看/ DisplayTemplates / Table.cshtml

@model IEnumerable<object>
@{WebGrid grid = new WebGrid(Model);}
@grid.GetHtml()

<强>用法

@Html.DisplayForModel("Table")

这也可以通过向属性添加[DataType("Table")]来处理集合的模型元数据。