使用新的Razor语法在ASP.NET MVC3中创建表格显示模板是否有好方法?
在ASP.NET MVC 2中,Phil Haack写了关于tabular display templates的博客。 ASP.NET MVC3中有更好的方法吗?
编辑:
是否也可以在模型元数据的基础上渲染网格?因此,我不想使用WebGrid API手动定义列,而是使用模型元数据。我看到的问题是,您每次都必须使用WebGrid API手动定义表。我想有可能拥有一种可重复使用的表格。
编辑: 那么使用模型元数据创建网格有什么好的做法吗?
答案 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)
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")]
来处理集合的模型元数据。