Extjs4.2+webAPI+EF实现分页以及webapi的数据传值

简介: 由于不明白分页的总数是怎么计算,不知道他的分页方式所以花费了好多功夫,现在弄出来了与大家分享下 1.首先是EF的简历,想必大家都清楚:添加-〉新建项-〉数据-〉Ado。net实体数据模型 2.就是后台数据也就是apiController,前台需要两个数据,一个是数据的总条数,第二个是要查询的分页数据 所以我们要建立一个实体,用于返回数据传送,由于多个页面都使用,多以用到了泛型。

由于不明白分页的总数是怎么计算,不知道他的分页方式所以花费了好多功夫,现在弄出来了与大家分享下

1.首先是EF的简历,想必大家都清楚:添加-〉新建项-〉数据-〉Ado。net实体数据模型

2.就是后台数据也就是apiController,前台需要两个数据,一个是数据的总条数,第二个是要查询的分页数据

所以我们要建立一个实体,用于返回数据传送,由于多个页面都使用,多以用到了泛型。代码如下:

public class PageData<T>
    {
        //数据总数
        public int TotolRecord { get; set; }

        //需要返回的数据        
        public T Data { get; set; }

    }

3.组织需要向前台返回的数据

 /// <summary>
        /// 获取所有的监控信息
        /// </summary>
        /// <returns></returns>
        public PageData<Monitor[]> Get([FromUri]string _dc, [FromUri] int page, [FromUri] int start, [FromUri] int limit)
        {
            OlandHIPDBInterfaceTrackEntities db = new OlandHIPDBInterfaceTrackEntities();

            //返回数据包含数据总数
            PageData<Monitor[]> returnData = new PageData<Monitor[]>();

            IQueryable<Monitor> data = from item in db.Monitor
                        orderby item.ID
                        select item;

            returnData.TotolRecord = data.ToArray().Length;

            data=data.Skip<Monitor>(start);

            data=data.Take<Monitor>(limit);

            returnData.Data =data .ToArray<Monitor>();

            return returnData;
        }

好了,后台数据准备完毕,那么就开始Extjs部分的了

4.Extjs部分我就直接上代码了

Ext.require([
'*',
'Ext.toolbar.Paging',
'Scripts.*'
])

Ext.onReady(function () {


    Ext.define('InterfaceTrackModel', {
        extend: 'Ext.data.Model',
        fields: [{
            name: 'ID',
            type: 'int',
            useNull: true
        },
         'Invoker',
         'MachineName',
          'MachineIP',
           'InvokeDate',
            'Interface',
            'InterfaceDes',
            'IsSuccessed',
            'ConsumeTime',
            'ErrorMessage',
            'Remark'
            ]
    });

    var InterfaceTrackStore = Ext.create('Ext.data.Store', {
        autoLoad: true,
        autoSync: true,
        model: 'InterfaceTrackModel',

        //设置分页大小
        pageSize: 20,
        proxy: {
            type: 'rest',
            url: 'api/InterfaceTrack',
            reader: {
                type: 'json',
                root: 'Data',
                //获取数据总数
                totalProperty: 'TotolRecord'
            },
            writer: {
                type: 'json'
            }
        }
    });



    var selModel = Ext.create('Ext.selection.CheckboxModel', {
        width: 55
    });


    //将时间转化为 2011-08-20 00:00:00 格式 
    //解决Ext4的formPanel通过grid的store查询问题 2012.2.22 jzr 
    function dateFormat(value) {
        if (null != value) {
            //return Ext.Date.format(new Date(value), 'Y-m-d H:i:s');
            return Ext.Date.format(new Date(value), 'Y-m-d H:i:s');
        }
        else {
            return null;
        }
    }

    Ext.define('Scripts.InterfaceTrackGrid', {
        extend: 'Ext.grid.GridPanel',
        title: '接口监控',
        id: 'InterfaceTrackGrid',
        initComponent: function () {
            Ext.apply(this, {
                closable: true, //是否可关闭
                width: 400,
                height: 300,
                frame: true,

                store: InterfaceTrackStore,
                iconCls: 'icon-user',
                // selModel: selModel,

                viewConfig: {
                    getRowClass: function (record) {
                        return record.get('IsSuccessed') ? '' : 'error-row';
                    } 
                },


                columns: [Ext.create('Ext.grid.RowNumberer', { width: 35, text: '序号' }),
         {
             text: '编号',
             width: 50,
             sortable: true,
             dataIndex: 'ID'
         }, {
             text: '调用者',
             width: 80,

             dataIndex: 'Invoker'

         }, {
             header: '机器名',
             width: 80,
             sortable: true,
             dataIndex: 'MachineName'

         }, {
             text: '机器IP',
             width: 100,
             // xtype: 'checkcolumn',
             dataIndex: 'MachineIP'

         }, {
             text: '调用时间',
             width: 140,
             sortable: true,
             dataIndex: 'InvokeDate',
             renderer: dateFormat

         }, {
             text: '调用接口',
             width: 120,
             sortable: true,
             dataIndex: 'Interface'

         }, {
             text: '接口描述',
             width: 140,
             sortable: true,
             dataIndex: 'InterfaceDes'

         }, {
             text: '是否成功',
             width: 80,
             sortable: true,
             dataIndex: 'IsSuccessed'

         }, {
             text: '耗时',
             width: 80,
             sortable: true,
             dataIndex: 'ConsumeTime'

         }, {
             text: '错误信息',
             width: 160,
             sortable: true,
             dataIndex: 'ErrorMessage'

         }, {
             text: '备注',
             width: 80,
             sortable: true,
             dataIndex: 'Remark'

         }],
                bbar: Ext.create('Ext.PagingToolbar', {
                    store: InterfaceTrackStore,
                    displayInfo: true,
                    displayMsg: '显示{0}-{1}条,共计{2}条',
                    emptyMsg: "没有数据"
                })
            }),
        this.callParent(arguments);
        }
    });
    //加载数据
    //    InterfaceTrackStore.load({
    //        params: {
    //            start: 0,
    //            limit: 20
    //        }
    //    });
})

这里注意的地方,前台接受数据的时候

 reader: {
                type: 'json',
                root: 'Data',
                //获取数据总数
                totalProperty: 'TotolRecord'
            },

检测后台传过来的数据,分页数据对应的是Data键值对,数据总数据条数为

TotolRecord键值对

最终效果图:

这里面还设计了webaip的传值接受问题,可以参考 webapi下如何传值

 

 

 

目录
相关文章
|
7月前
|
前端开发
网页设计,若依项目修改(It must be done)02------axios封装后发get请求,axios请求的位置在呢?
网页设计,若依项目修改(It must be done)02------axios封装后发get请求,axios请求的位置在呢?
|
前端开发 Java API
SpringMVC学习笔记(获取参数,传递参数——关于前后端传参交互的总结、from表单、Ajax数据提交))(上)
SpringMVC学习笔记(获取参数,传递参数——关于前后端传参交互的总结、from表单、Ajax数据提交))(上)
203 0
|
XML 前端开发 定位技术
MVC 5 + EF6 入门完整教程14 -- 动态生成面包屑导航
原文:MVC 5 + EF6 入门完整教程14 -- 动态生成面包屑导航 上篇文章我们完成了 动态生成多级菜单 这个实用组件。 本篇文章我们要开发另一个实用组件:面包屑导航。 面包屑导航(BreadcrumbNavigation)这个概念来自童话故事"汉赛尔和格莱特",当汉赛尔和格莱特穿过森林时,不小心迷路了,但是他们发现在沿途走过的地方都撒下了面包屑,让这些面包屑来帮助他们找到回家的路。
1260 0
|
Web App开发 前端开发 容器
MVC5+EF6 入门完整教程13 -- 动态生成多级菜单
原文:MVC5+EF6 入门完整教程13 -- 动态生成多级菜单 稍微有一定复杂性的系统,多级菜单都是一个必备组件。 本篇专题讲述如何生成动态多级菜单的通用做法。 我们不用任何第三方的组件,完全自己构建灵活通用的多级菜单。
1135 0
|
XML JSON 移动开发
【WebAPI No.5】Core WebAPI中的自定义格式化
介绍 Web API为JSON和XML提供媒体类型格式化程序。框架默认将这些格式化程序插入管道中。客户端可以在HTTP请求的Accept标头中请求JSON或XML. 格式化数据这个东西,其实没有什么最好的数据,要看各种场景,最适合才是最好的,不是说json就比xml好,容易解析什么的等。
2482 0
|
Web App开发 JSON .NET
【WebAPI No.1】创建简单的 .NETCore WebApi
介绍: 官方定义如下,强调两个关键点,即可以对接各种客户端(浏览器,移动设备),构建http服务的框架。Web API最重要的是可以构建面向各种客户端的服务。 core的WebAPI与ASP.NET WebAPI是有些区别的,现在使用的是控制器路由[Route("api/Menu")]和请求方式路由[HttpGet]、[HttpGet("{id}")]结合的 方式。
1946 0
|
前端开发 API 数据格式
|
缓存 前端开发 JavaScript
|
JSON JavaScript 前端开发

热门文章

最新文章