本示例显示了如何动态生成前端jqGrid代码,一般情况仅一行代码:

<%=Html.jqGrid<TestModel>(@"#jqT", "Test", "/Home/GridData/")%>

效果如下:

还不仅仅如此,利用MetaData,将自动对不同实体对象进行捆绑,自动生成Grid。

如果你想知道如何在asp.net MVC中使用jqGrid,请参考

http://haacked.com/archive/2009/04/14/using-jquery-grid-with-asp.net-mvc.aspx

看代码

1、 扩展HtmlHelper来输出一段Javascript到客户端。

代码

public static class jqGridExtensions
    {
        public static string jqGrid<T>(this HtmlHelper helper, string gridID, string caption, string url)
        {
            if (gridID.Substring(0, 1) != "#")
                gridID = "#" + gridID;
            string pagerID = string.Format("{0}_pager", gridID);
            StringBuilder sb = new StringBuilder();             sb.AppendLine(" <script type=\"text/javascript\">$(function(){");//jQuery(document).ready(function() {
            sb.AppendLine("$('%%GRIDID%%').jqGrid({".Replace("%%GRIDID%%", gridID));       //jQuery("#list").jqGrid({
            sb.AppendFormat("url:'{0}',", url);                            //        url: '/Home/GridData/',
            sb.Append("datatype: 'json',mtype: 'GET',");                 //        datatype: 'json',mtype: 'GET',
            sb.AppendFormat("colNames:[{0}],", GetColNames<T>());             sb.AppendFormat("colModel:[{0}],", GetColModel<T>());
            sb.Append("pager: '%%GRIDPAGERID%%',rowNum: 20,rowList: [10, 20, 50,100],".Replace("%%GRIDPAGERID%%", pagerID));
            sb.AppendFormat("sortname:'{0}',sortorder: 'desc',", GetSortField<T>());
            sb.Append("viewrecords: true,imgpath: '/themes/redmond/images',");
            sb.AppendFormat("caption: '{0}'", caption);
            sb.Append("});\n$('%%GRIDID%%').jqGrid('navGrid','%%GRIDPAGERID%%',{ edit: false, add: false, del: false });".Replace("%%GRIDID%%", gridID).Replace("%%GRIDPAGERID%%", pagerID));
            sb.Append("});</script>\n");
            sb.AppendFormat("<table id=\"{0}\" class=\"scroll\" cellpadding=\"0\" cellspacing=\"0\"></table>", gridID.Substring(1));
            sb.AppendFormat("<div id=\"{0}\" class=\"scroll\" style=\"text-align:center;\"></div>", pagerID.Substring(1));
            sb.AppendLine();
            return sb.ToString();
        }
}

上述代码隐含了3个函数来取得排序字段,Grid的列标题及ColModel。

2、 对Grid的列标题及排序字段,ColModel进行定制。以GetColModel为例:

代码

 private static string GetColModel<T>()
        {
            ModelMetadata metadata = ModelMetadataProviders.Current.GetMetadataForType(null, typeof(T));             StringBuilder sb = new StringBuilder();
            int width=100;
            foreach (ModelMetadata proMeta in metadata.Properties)
            {
                ColWidthAttribute colWidthAttr = GetCustomAttribute<ColWidthAttribute>(proMeta) as ColWidthAttribute;
                if (colWidthAttr != null)
                    width = colWidthAttr.Width;
                sb.Append("{");
                sb.AppendFormat("name:'{0}',index:'{0}',width:{1},align:'left'", proMeta.PropertyName, width);
                sb.Append("},");
            }
            sb.Remove(sb.Length - 1, 1);
            return sb.ToString();
            //return "{ name: 'Id', index: 'Id', width: 140, align: 'left' }, { name: 'Votes', index: 'Votes', width: 180, align: 'left' },{ name: 'Title', index: 'Title', width: 400, align: 'left',editable:true}";
        }         private static object GetCustomAttribute<T>(ModelMetadata proMeta) 
        {
            PropertyInfo property = proMeta.ContainerType.GetProperty(proMeta.PropertyName);
            object[] propertyAttributes = property.GetCustomAttributes(typeof(T), true);
            if (propertyAttributes.Length > 0)
            {
                return (propertyAttributes[0]);             }
            
            return null;
        }

3、 扩展一个列宽(Column Width)属性。


 public class ColWidthAttribute: Attribute
    {
        public ColWidthAttribute()
        {         }         public int Width { get; set; }
    }

4、 如何定制实体对象。

代码

    [DisplayName("ID")]//暂时用这个来表示排序字段
    public class TestModel
    {
        [DisplayName("编号")]
        [ColWidth(Width=100)]
        public int ID{get;set;}         [DisplayName("支持率")]
        [ColWidth(Width = 120)]
        public int Votes { get; set; }         [DisplayName("议题")]
        [ColWidth(Width = 300)]
        public string Title { get; set; }     }

5、 Controller中的代码。

代码

 public ActionResult GridData(string sidx, string sord, int page, int rows)
        {
            var jsonData = new
            {
                total = 1, // we'll implement later 
                page = page,
                records = 3, // implement later 
                rows = new[]{
                      new {id = 1, cell = new[] {"1", "-7", "Is this a good question?"}},
                      new {id = 2, cell = new[] {"2", "15", "Is this a blatant ripoff?"}},
                      new {id = 3, cell = new[] {"3", "23", "Why is the sky blue?"}}
                }
            };
            return Json(jsonData,JsonRequestBehavior.AllowGet);
        }

千万要记得JSon中设置JsonRequestBehavior.AllowGet,否则jqGrid中将只有表头没有数据。

6、 前端代码。

代码

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

<asp:Content ID="aboutTitle" ContentPlaceHolderID="TitleContent" runat="server">
    About Us
</asp:Content> <asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server">
    <h2>About</h2>
    <p>
        Put content here.
    </p>
    <div>
    
    <%=Html.jqGrid<TestModel>(@"#jqT", "Test", "/Home/GridData/")%>
    </div>
</asp:Content>

看完,也许你会说这还叫代码少一点,我只是觉得这篇文章可能浪费你的时间。

看完,也许你觉得这个例子威力太小,还想要能够自动支持在jqGrid上是否能够编辑,以及子表支持,等等~~~,我就觉得很欣慰了。

在Asp.net MVC使用jqGrid--代码少点再少点的更多相关文章

  1. Asp.net mvc 5 CRUD代码自动生成工具- vs.net 2013 Saffolding功能扩展

    Asp.net mvc 5 CRUD代码自动生成工具 -Visual Studio.net2013 Saffolding功能扩展 上次做过一个<Asp.net webform scaffoldi ...

  2. ASP.NET MVC and jqGrid 学习笔记 6-增删改操作

    程序结构: Member.cs CRUD.cshtml CRUD.js HomeController 一.Model public class Member { [Key] public int No ...

  3. 【ASP.NET MVC】jqGrid 增删改查详解

    1   概述 本篇文章主要是关于JqGrid的,主要功能包括使用JqGrid增删查改,导入导出,废话不多说,直接进入正题. 2   Demo相关 2.1   Demo展示 第一部分 第二部分 2.2 ...

  4. ASP.NET MVC 简单分页代码

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  5. 史上最全的ASP.NET MVC路由配置,以后RouteConfig再弄不懂神仙都难救你啦~

    继续延续坑爹标题系列.其实只是把apress.pro.asp.net.mvc.4.framework里的CHAPTER 13翻译过来罢了,当做自己总结吧.内容看看就好,排版就不要吐槽了,反正我知道你也 ...

  6. ASP.NET MVC and jqGrid 学习笔记 1-基本配置

    新建一个mvc项目后

  7. 新建 ASP.NET MVC 项目快速代码

    视图模型- PagingInfo 类: public class PagingInfo { public int TotalItems { get; set; } public int ItemsPe ...

  8. ASP.NET MVC and jqGrid 学习笔记 5-添加数据

    据介绍,jqgrid有3种编辑数据的方式: Cell Editing 只允许修改某一个单元格内容 Inline Editing 允许在jqGrid中直接修改某一行的数据 Form Editing 弹出 ...

  9. ASP.NET MVC and jqGrid 学习笔记 3-如何从数据库获得数据

    实际应用中,大部分都是从数据库里获得数据,所以先建立一个数据库,Database first 或者Code first都可以,这里用Code first. 一.Model public class M ...

随机推荐

  1. 获取DataTable选择第一行某一列值

    数据源是一个DataTable,现在我们需要获取这个DataTable的第一行第一列的值.先准备一个数据集,创建一个DataTable,并填充数据: source code: using System ...

  2. 58同城高性能移动Push推送平台架构演进之路

    本文详细讲述58同城高性能移动Push推送平台架构演进的三个阶段,并介绍了什么是移动Push推送,为什么需要,原理和方案对比:移动Push推送第一阶段(单平台)架构如何设计:移动Push推送典型性能问 ...

  3. 通过泛型数据,操作SQL数据库

    本人在操作数据库的时候,采用将对象的形式操作传入数据库,经过大量百度和朋友帮助,总结出如下两个接口.用于插入数据,提取数据. 要这样操作的前提条件,就是类名和表名一致,类字段和表字段一致就可以了 // ...

  4. C#通用类Helper整理

    ★前言     最近下载了tita_chou在CSDN上传的一个资源,是在工作中整理的C#帮助类,里面包含了很多实用的类,想到我之前收集过自己用到少的可怜的类,心生敬意啊.当粗略的查看了那个资源,发现 ...

  5. Scalaz(4)- typeclass:标准类型-Equal,Order,Show,Enum

    Scalaz是由一堆的typeclass组成.每一个typeclass具备自己特殊的功能.用户可以通过随意多态(ad-hoc polymorphism)把这些功能施用在自己定义的类型上.scala这个 ...

  6. linux下MySQL表名忽略大小写设置

    最近公司项目的MySQL数据库要迁移到linux下,部署时日志总是显示报找不到一个表,用MYSQL查看明明有这个表.后来经百度,原来LINUX下的MYSQL默认是区分表名大小写的. 用命令查看当前是否 ...

  7. 七个结构模式之代理模式(Proxy Pattern)

    定义: 给某一个对象提供一个代理或者占位符,并由代理类来控制对原对象的访问.代理对象在客户端和实际对象之间启到了中介作用,并且强调了代理类对原对象的控制作用.例如:安全代理.缓冲代理.远程代理等. 结 ...

  8. Vue.js 2.0 参考手册.CHM下载

    下载地址 Vue.js 2.0 参考手册.CHM下载链接: http://pan.baidu.com/s/1kVbhd4b 密码: wxfh

  9. QRCode.js 生成二维码

    QRCode.js 是一个用于生成二维码图片的插件. github地址 在线实例 实例预览 基础示例 实例预览 API 接口 使用方法 载入 JavaScript 文件 <script src= ...

  10. Typecast 免费了!献给设计师们的礼物

    TypeCast 让你可以从 Fonts.com.TypeKit.FontDeck 和 Google 这些字体供应和商选择字体,而且能非常方便的比较这些字体使用效果.如果你想获得用户对这些字体效果的反 ...