ASP.NET MVC里显示表格不像WebForm里那般容易。我归纳有以下三种方式:1JQERY+插件的方式。2、在页面通过 Foreach循环的方式做显示。3、使用开源控件,比如MvcContrib。MvcContrib是一个很出名的控件,功能上夜是足够的强大,包括对AOP的支持等。下面仅简单说说MvcContrib的初次使用体会。MvcContrib可以在CodePlex上下载。
网上也有一些大侠对MvcContrib的使用做个一些介绍,但是可能由于版本的问题,现在关于它的使用按照大鸟们得说法又不太一样。所以我将自己的使用经历记录下来,以供有需要的朋友们了解了解。当然,我也毕竟刚开始用,有很多都还不知道,希望大家有机会相互借鉴一下。
首先说说我使用的MvcContrib的版本2.0.96.0。
熟悉WebForm模式或者MVC模式的朋友一定知道System.Web配置节下有个Pages节点。这个节点就是对工程下所有页面做做的一些配置,包括明明空间等。首先是在Web.Config文件中做配置。需要引入的命名空间有如下几个:
<add namespace="MvcContrib.UI"/> <add namespace="MvcContrib.UI.Html"/> <add namespace="MvcContrib"/> <add namespace="MvcContrib.UI.Grid"/>
在页面上就可以通过<%Html.Grid%>使用了。Grid是个泛型方法,需要制定泛型类型,以使用此类型来做表格显示。然后就可以直接给出数据源,然后进行输出了。如:<% Html.Grid<Demo.Models.Student>(ViewData.Model).AutoGenerateColumns<Demo.Models.Student() %>。通过AutoGenerateColumns泛型方法就可以进行输出。不过他输出的是从Controller返回的整个数据表。
当然,让Controller层返回的数据有选择行的输出也是可行的。具体方式如下:
<% Html.Grid<Demo.Models.Student>(ViewData.Model).Columns( cols=> { cols.For(s=>s.Name); cols.For(s=>s.Address,"地址"); } ); %>
通过上面的Lambda表示式,就可以输出制定的数据列了。当然也可以对列做一些样式设置。如:
<% Html.Grid<Demo.Models.Student>(ViewData.Model).Columns( cols=> { cols.For(s=>s.Name).Attributes(new Hash(@class => "grid").Add<int>("cellpadding", 2).Add<int> ("cellspacing", 0)); cols.For(s=>s.Address,"地址").DoNotEncode(); } ) .Empty("没有数据") .HeaderRowAttributes(new Hash(Style=>"text-align:center;font:bold 13px/20px Verdana;")); %>
Attributes是对列做样式,DoNotEncode是对列显示做的HTML编码,Empty指明没有数 据时显示的信息、<br>HeaderRowAttributes设置表头的样式。
以前版本中用法和现在稍有差别:之前版本中,Columns是作为Grid泛型方法的第二个参数使 用的。在这个版本中,Gird泛型方</strong><br><strong>法只有一个参数,但是有参数有两种 类型,1:ViewData中Key的名字的字符串。2、IEnumerable<>类型的数据 源
MvcContrib的用法还不止这些。他还包括对Form表单做一 些验证设置、做Route,还有就是扩展Controller的功能。总之,它<br>是一个很强大的开源控件。以后有些体会再做介绍。