MVC4 Jqgrid设计与实现

项目本来使用的是webgrid。后台弃用改成Jqgrid插件。

首先介绍一下webgrid的用法:webgrid是mvc中HtmlHelper自带的。首先创建viewmodel用于数据的绑定,然后在页面中进行绑定一些参数的设置即可

具体如下:

@model Models.SearchPageViewModel
@{
    WebGrid grid = new WebGrid(null,
        rowsPerPage: Model.PagingInfo.ItemsPerPage,
        selectionFieldName: "selectedRow",
        ajaxUpdateContainerId: "gridContent",
        canSort: false);
    grid.Bind(Model.modelList, autoSortAndPage: false, rowCount: Model.PagingInfo.TotalItems);
}

@if (grid.TotalRowCount > 0)
{
    <div id="gridContent">
    @grid.GetHtml(
    tableStyle: "GridViewTable",
    headerStyle: "HeaderStyle",
    footerStyle: "FooterStyle",
    rowStyle: "RowStyle",
    alternatingRowStyle: "AltRowStyle",
    selectedRowStyle: "SelectedRowStyle",
    mode: WebGridPagerModes.All,
    numericLinksCount: 10,
    firstText: "首页",
    lastText: "尾页",
    previousText: "<",
    nextText: ">",
    columns: grid.Columns(
    grid.Column("RowNum", "序号", format: (item) => item.RowNum),
            grid.Column("XZQDM", "行政区代码", format: (item) => item.XZQDM, style: null, canSort: false),
            grid.Column("XZQMC", "行政区名称", format: (item) => item.XZQMC, canSort: false),
            grid.Column("UPTIME", "上传时间", format: (item) => item.UPTIME, canSort: false),
             grid.Column(header: "选择",
                    format: @<text><input class="check-box"  id="assignChkBx" name="assignChkBx" type="checkbox" value="@item.PZWH"/></text>)
                                        ))
    </div>

Jqgrid用法大同小异:

需要引用<script type="text/javascript" src="~/scripts/locales/grid.locale-cn.js"></script>
    <script type="text/javascript" src="~/scripts/jqGrid/jquery.jqGrid.js"></script>

<link type="text/css" href="~/content/jquery-ui/jquery-ui-1.10.4.custom.css" media="screen" rel="Stylesheet" />
    <link type="text/css" href="~/Content/jqGrid/ui.jqgrid.css" media="screen" rel="Stylesheet" />

第一步:定义一个呈现数据的表格 <table id="gridUploadProg" style=" height:100%; width:100%"></table>

第二部:在js里面进行相关设置

var grid = $("#gridUploadProg");
         grid.jqGrid({
             url: ‘ResultManage/QueryData‘,
             mtype: ‘post‘,
             datatype: ‘json‘,
             loadonce: false,
             data: {},
             colNames: [‘项目ID‘, ‘行政区代码‘, ‘行政区名称‘],
             colModel: [
                    { name: ‘XMID‘, index: ‘XMID‘, sortable: false, key: true, align: ‘center‘, hidden: true },
                    { name: ‘XZQDM‘, index: ‘XZQDM‘ },
                    { name: ‘XZQMC‘, index: ‘XZQMC‘, align: ‘center‘ },
                    { name: ‘XMMC‘, index: ‘XMMC‘, align: ‘center‘ }
                ],
             rowNum: 10,
             rowList: [10, 15, 20, 30],
             pager: ‘#gridUploadProgPager‘,
             emptyrecords: "没有符合要求的数据",
             gridview: true,
             rownumbers: true,
             sortname: ‘ProvinceCode‘,
             viewrecords: true,
             sortorder: ‘asc‘,
             multiselect: true,
             caption: ‘任务管理列表‘,
             jsonReader: {
                 page: ‘page‘,
                 total: ‘total‘,
                 records: ‘records‘,
                 root: ‘rows‘
             },
             height: ‘100%‘,
             loadui: ‘block‘,
             autoScroll: false,
             loadComplete: function (data) { //完成服务器请求后,回调函数
                 //                alert(data.records);
                 if (data.records == 0) { //如果没有记录返回,追加提示信息
                     $("p").appendTo($("#gridUploadProg")).addClass("nodata").html("找不到相关数据!");
                 }
                 else { //否则,删除提示
                     $("p.nodata").remove();
                 }
             }

         });

第三步:在control里面进行模型的获取JSON的转换

 public void QueryData(string sidx = "XZQDM", string sord = "DESC", int rows = 10, int page = 1)
        {
            SearchConditionModel searchCondition = new SearchConditionModel();
            if (this.Session["SearchCondition"] != null)
            {
                searchCondition = (SearchConditionModel)this.Session["SearchCondition"];
            }

            int totalRecord = 0;
            IEnumerable<TsakManageViewModel> modelList = this.TaskManageDataContext.GetModelList(
                    out totalRecord,
                    provinceCode: searchCondition.XZQ,
                    rwlx: searchCondition.RWLX,
                    taskResult: searchCondition.SFTG,
                    orderField: sidx,
                    orderType: sord,
                    pageIndex: page,
                    pageSize: rows
                );
            //int index = (page - 1) * rows; // 开始记录数
            int totalPage = totalRecord % rows == 0 ? totalRecord
               / rows : totalRecord / rows + 1; // 计算总页数
            int pagesize = rows;
            string son = Newtonsoft.Json.JsonConvert.SerializeObject(modelList);

            son = "{ \"page\": " + page.ToString() + ", \"total\": " + totalPage.ToString() + ", \"records\": " + totalRecord.ToString() + ", \"rows\": " + son + "}";
            Response.Write(son);
        }

以后每一次分页查询都会进到这个action里面,实现分页实时查询数据。JSON数据前面一定要加记录数等信息用于分页的显示。当然还有其他方法返回json数据。理想的格式应该的返回JsonResult的。像这样 return Json(modelList, JsonRequestBehavior.AllowGet);这种方法我还没有测试,不清楚能不能返回数据到界面上。这种方法看起来明显正规一点

时间: 2024-10-12 22:11:17

MVC4 Jqgrid设计与实现的相关文章

ASP.NET MVC5 入门

参考资料<ASP.NET MVC5 高级编程>第5版 第1章 入门 1.1 ASP.NET MVC 简介 ASP.NET MVC是一种构建Web 应用程序的框架,它将一般的MVC(Model-View-Controller)模式应用于ASP.NET 框架. 在分离应用程序的关注点方面(例如,从显示逻辑中分离出数据访问逻辑),MVC是一种强大而简洁的方式. MVC 将应用程序的用户界面(User InterFace,UI)分为三个主要部分: 模型:一组类,描述了要处理的数据以及修改和操作数据的业

基于MVC4+EasyUI的Web开发框架形成之旅--MVC控制器的设计

自从上篇<基于MVC4+EasyUI的Web开发框架形成之旅--总体介绍>总体性的概括,得到很多同行的关注和支持,不过上一篇主要是介绍一个总体的界面效果和思路,本系列的文章将逐步介绍其中的细节,本文主要介绍整个Web开发框架中的MVC控制器的设计.在设计之初,我就希望尽可能的减少代码,提高编程模型的统一性.因此希望能够以基类继承的方式,和我Winform开发框架一样,尽可能通过基类,而不是子类的重复代码来实现各种通用的操作. 1.登录控制的控制器基类设计 我们知道,一般我们创建一个MVC的控制

(转)基于MVC4+EasyUI的Web开发框架形成之旅--MVC控制器的设计

http://www.cnblogs.com/wuhuacong/p/3284628.html 自从上篇<基于MVC4+EasyUI的Web开发框架形成之旅--总体介绍>总体性的概括,得到很多同行的关注和支持,不过上一篇主要是介绍一个总体的界面效果和思路,本系列的文章将逐步介绍其中的细节,本文主要介绍整个Web开发框架中的MVC控制器的设计.在设计之初,我就希望尽可能的减少代码,提高编程模型的统一性.因此希望能够以基类继承的方式,和我Winform开发框架一样,尽可能通过基类,而不是子类的重复

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(47)-工作流设计-补充

原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(47)-工作流设计-补充 系列目录 补充一下,有人要表单的代码,这个用代码生成器生成表Flow_Form表的Index代码就可以 加上几个按钮就可以了 <div class="mvctool"> <input id="txtQuery" type="text" class="searchText" /> @Ht

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(48)-工作流设计-起草新申请

原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(48)-工作流设计-起草新申请 系列目录 创建新表单之后,我们就可以起草申请了,申请按照严格的表单步骤和分支执行. 起草的同时,我们分解流转的规则中的审批人并保存,具体流程如下 接下来创建DrafContoller控制器,此控制器只有2个页面,一个Create(起草页面)Index(表单列表) 表单列表显示个人想法,我是根据分类直接获取其下表单,即Flow_Type下的Flow_Form public

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(42)-工作流设计01

原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(42)-工作流设计01 工作流在实际应用中还是比较广泛,网络中存在很多工作流的图形化插件,可以做到拉拽的工作流设计,非常简便,再配合第三方编辑器,可以直接生成表单,我没有刻意的浏览很多工作流的实际设计,我认为工作流只要有动态可修改的流转,有时可按角色,部门,上级或者职位流转即是比较好的正常工作流!这里只带给一个思路的简单工作流... 工作流其实有几种,也可以设计得很简单: 1.固定的工作流,很小的公司,

建筑材料系统 ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout 的架构设计开发

框架介绍: 1.基于 ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout 的架构设计开发 2.采用MVC的框架模式,具有耦合性低.重用性高.生命周期成本低.可维护性高.有利软件工程化管理等优点 3.采用WebAPI,客户端完全摆脱了代理和管道来直接进行交互 4.采用EasyUI前台UI界面插件,可轻松的打造出功能丰富并且美观的UI界面 5.采用Knockout,,提供了一个数据模型与用户UI界面进行关联的高层次方式(采用行为驱动开发) 6.数据访问层采用强大的

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(41)-工作流设计01

工作流在实际应用中还是比较广泛,网络中存在很多工作流的图形化插件,可以做到拉拽的工作流设计,非常简便,再配合第三方编辑器,可以直接生成表单,我没有刻意的浏览很多工作流的实际设计,我认为工作流只要有动态可修改的流转,有时可按角色,部门,上级或者职位流转即是比较好的正常工作流! 工作流其实有几种,也可以设计得很简单: 1.固定的工作流,很小的公司,很固定的流程! 2.自定义表单和字段,有时候可以校验表单 3.自定义流转的人员,即按角色流转,用户每一次提交工作流都必须在步骤中添加要转的人员 4.直接设

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(44)-工作流设计-设计表单

系列目录 设计表单是比较复杂的一步,完成一个表单的设计其实很漫长,主要分为四步. 开始之前先说说表的结构. 其实表Flow_Form与Flow_FormContent设计是有一个缺陷的.我总共是设置最高26个字段从A~Z如果超过26个字段的表单是属于硬编码的.但是我认为26个字段已经足够 因为这里我是单表模式比起表关联无限字段理论上性能会更加快,特别是当数据库申请带到千万级数据的时候(你自己可以设计更加灵活的表单管理) Flow_Form的A~Z对应的是Flow_FlowAttr表中的数据, F