ASP.NET MVC 3 Beta初体验之WebGrid
创始人
2024-07-16 04:31:37
0

ASP.NET MVC 3 Beta中除了推出一种新的视图引擎Razor。还推出了几种新的HtmlHelper。我比较关注的是WebGrid,这篇文章将介绍一下WebGrid的使用。WebGrid提供了分页和排序的功能,在此之前在MVC中分页和排序时需要自己去写的。这篇文章将分别介绍在aspx视图引擎和Razor视图引擎中如何使用它。

我通过ADO.NET Entity Data Model从NORTHWND的Products中表中取数据。在Controller中取数据:

  1. public class HomeController : Controller      
  2. {        public ActionResult Index()         
  3.  {             
  4.  NORTHWNDEntities entity = new NORTHWNDEntities();              
  5. return View( entity.Products.ToList());        
  6.   }     }  

在aspx视图引擎中使用WebGrid代码如下:

  1.     
  2. <% var grid = new WebGrid(source: Model, defaultSort: "ProductName", rowsPerPage: 5); %>   
  3. <%=grid.GetHtml(       
  4. tableStyle: "grid",       
  5. headerStyle: "head",       
  6. alternatingRowStyle: "alt",       
  7. columns: grid.Columns(                 
  8. grid.Column(format: (item) => Html.ActionLink("Edit", "Edit", new { id = item.ProductID })),                 
  9. grid.Column(format: (item) => Html.ActionLink("Delete", "Delete", null, new { onclick = string.Format("deleteRecord('Employee', '{0}')", item.ProductID), @class = "Delete", href = "JavaScript:void(0)" })),                 
  10. grid.Column("ProductName","产品名称"),               
  11. grid.Column("QuantityPerUnit","每单位数量"),                 
  12. grid.Column("UnitPrice","单价"),               
  13. grid.Column("UnitsInStock", "库存单位"),               
  14. grid.Column("UnitsOnOrder","订单单位"),               
  15. grid.Column("ReorderLevel","重新排序级别"),               
  16. grid.Column("Discontinued","已停产")     )     )    %>
  17.  
 

在Razor中使用WebGrid代码如下:

  1.   
  2. @{    
  3. var grid = new WebGrid(source: Model,  
  4. defaultSort: "ProductName",   
  5. rowsPerPage: 10);  
  6. }  
  7. @grid.GetHtml(  
  8. tableStyle: "grid",  
  9. headerStyle: "head",  
  10. alternatingRowStyle: "alt",  
  11. columns: grid.Columns(  
  12. grid.Column(format: (item) => Html.ActionLink("Edit", "Edit", new { id = item.ProductID })),  
  13. grid.Column(format: (item) => Html.ActionLink("Delete", "Delete", null, new { onclick = string.Format("deleteRecord('Product', '{0}')", item.ProductID), @class = "Delete", href = "JavaScript:void(0)" })),   
  14. grid.Column("ProductName","产品名称"),  
  15. grid.Column("QuantityPerUnit","每单位数量")  
  16. ,grid.Column("UnitPrice","单价"),  
  17. grid.Column("UnitsInStock", "库存单位"),  
  18. grid.Column("UnitsOnOrder","订单单位"),  
  19. grid.Column("ReorderLevel","重新排序级别"),  
  20. grid.Column("Discontinued","已停产")))
 

WebGrid构造函数如下:

  1. public WebGrid(IEnumerable source, 
  2. IEnumerable columnNames = null, 
  3. string defaultSort = null, 
  4. int rowsPerPage = 10, 
  5. bool canPage = true, bool canSort = true, 
  6. string ajaxUpdateContainerId = null, 
  7. string fieldNamePrefix = null, 
  8. string pageFieldName = null, 
  9. string selectionFieldName = null, 
  10. string sortFieldName = null, 
  11. string sortDirectionFieldName = null);  
  12.  

常见参数意思是:

1、source 表示数据源

2、columnNames表示显示的列

3、defaultSort 默认按什么排序

4、rowsPerPage 每页多少行数据

5、canPage 是否能排序

上面两段代码的意思是定义了一个既分页又能排序的grid。

运行:

在看看两个view的完整代码:

aspx:

  1. <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage>" %> 
  2.       
  3. 产品列表  
  4.  
  5.     
  6. function deleteRecord(a, b) {          
  7. alert("删除:"+b);     
  8.  } 
  9.  

    产品列表

        
  10.    
  11. <% var grid = new WebGrid(source: Model, defaultSort: "ProductName", rowsPerPage: 5); %>   
  12. <%=grid.GetHtml(       
  13. tableStyle: "grid",       
  14. headerStyle: "head",       
  15. alternatingRowStyle: "alt",       
  16. columns: grid.Columns(                
  17.  grid.Column(format: (item) => Html.ActionLink("Edit", "Edit", new { id = item.ProductID })),                 
  18. grid.Column(format: (item) => Html.ActionLink("Delete", "Delete", null, new { onclick = string.Format("deleteRecord('Employee', '{0}')", item.ProductID), @class = "Delete", href = "JavaScript:void(0)" })),                 
  19. grid.Column("ProductName","产品名称"),               
  20. grid.Column("QuantityPerUnit","每单位数量"),                 
  21. grid.Column("UnitPrice","单价"),               
  22. grid.Column("UnitsInStock", "库存单位"),               
  23. grid.Column("UnitsOnOrder","订单单位"),               
  24. grid.Column("ReorderLevel","重新排序级别"),               
  25. grid.Column("Discontinued","已停产")     )     )    %> 
 

Razor:

代码 

  1.  @model List @{  View.Title = "产品列表"; } 

     

  2. 产品列表

        @{       
  3. var grid = new WebGrid(source: Model,  defaultSort: "ProductName",   rowsPerPage: 3); }  @grid.GetHtml(       
  4. tableStyle: "grid",       
  5. headerStyle: "head",       
  6. alternatingRowStyle: "alt",       
  7. columns: grid.Columns(            
  8. grid.Column(format: (item) => Html.ActionLink("Edit", "Edit", new { id = item.ProductID })),          
  9. grid.Column(format: (item) => Html.ActionLink("Delete", "Delete", null, new { onclick = string.Format("deleteRecord('Product', '{0}')", item.ProductID), @class = "Delete", href = "JavaScript:void(0)" })),             
  10. grid.Column("ProductName","产品名称"),          
  11. grid.Column("QuantityPerUnit","每单位数量"),          
  12. grid.Column("UnitPrice","单价"),            
  13. grid.Column("UnitsInStock", "库存单位"),          
  14. grid.Column("UnitsOnOrder","订单单位"),          
  15. grid.Column("ReorderLevel","重新排序级别"),          
  16. grid.Column("Discontinued","已停产")     )     )   
 

 

Razor去掉了那些模板页的代码,使代码看起来更整洁。比较喜欢Razor。

总结:本文很简单,介绍了一下ASP.NET MVC 3 Beta中新功能WebGrid,由于这种方式WebGrid是在内存中分页和排序的,所以不适合大数据量。

源码下载地址:http://down.51cto.com/data/134994

原文标题:ASP.NET MVC 3 Beta之WebGrid的使用

链接:http://www.cnblogs.com/zhuqil/archive/2010/10/17/ASP-NET-MVC-3-Beta-WebGrid.html

【编辑推荐】

  1. 详解ASP.NET MVC 3 beta新特性
  2. .Net平台下的分布式缓存设计
  3. .Net平台开源项目五年发展回顾
  4. .NET平台上Web开发的未来?
  5. .NET开发人员应该关注的七个开源项目

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...