knockoutjs+ jquery pagination+asp.net web Api 实现无刷新列表页
Knockoutjs 是一个微软前雇员开发的前端MVVM JS框架, 具体信息参考官网 http://knockoutjs.com/
Web API数据准备: 偷个懒数据结构和数据copy自官网实例 http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api
- using System.Collections.Generic;
- using System.Linq;
- using System.Web.Http;
- namespace WebApp.Api
- {
- public class Product
- {
- public int Id { get; set; }
- public string Name { get; set; }
- public string Category { get; set; }
- public decimal Price { get; set; }
- }
- public class TestController : ApiController
- {
- Product[] products = new Product[]
- {
- new Product { Id = , Name = "Tomato Soup", Category = "Groceries", Price = },
- new Product { Id = , Name = "Yo-yo", Category = "Toys", Price = 3.75M },
- new Product { Id = , Name = "Hammer", Category = "Hardware", Price = 16.99M },
- new Product { Id = , Name = "Tomato Soup", Category = "Groceries", Price = },
- new Product { Id = , Name = "Yo-yo", Category = "Toys", Price = 3.75M },
- new Product { Id = , Name = "Hammer", Category = "Hardware", Price = 16.99M } ,
- new Product { Id = , Name = "Tomato Soup", Category = "Groceries", Price = },
- new Product { Id = , Name = "Yo-yo", Category = "Toys", Price = 3.75M },
- new Product { Id = , Name = "Hammer", Category = "Hardware", Price = 16.99M },
- new Product { Id = , Name = "Tomato Soup", Category = "Groceries", Price = },
- new Product { Id = , Name = "Yo-yo", Category = "Toys", Price = 3.75M },
- new Product { Id = , Name = "Hammer", Category = "Hardware", Price = 16.99M },
- new Product { Id = , Name = "Tomato Soup", Category = "Groceries", Price = },
- new Product { Id = , Name = "Yo-yo", Category = "Toys", Price = 3.75M },
- new Product { Id = , Name = "Hammer", Category = "Hardware", Price = 16.99M } ,
- new Product { Id = , Name = "Tomato Soup", Category = "Groceries", Price = },
- new Product { Id = , Name = "Yo-yo", Category = "Toys", Price = 3.75M },
- new Product { Id = , Name = "Hammer", Category = "Hardware", Price = 16.99M }
- };
- [Route("api/getpagecount")]
- [HttpGet]
- public int GetCount()
- {
- return products.Length;
- }
- [Route("api/getdata")]
- [HttpGet]
- public IEnumerable<Product> GetProduct(int pageIndex, int pageSize)
- {
- return products.Skip(pageIndex * pageSize).Take(pageSize);
- }
- }
- }
上述就是web api数据源和两个供前端调用分页的接口
JS 交互代码如下
- ; ( function ( ko )
- {
- var pageSize = 10,
- viewModel,
- isBind = false;
- function loadTable( pageIndex )
- {
- $.ajax( {
- url: '/api/getdata?pageIndex='+pageIndex+'&pageSize='+pageSize,
- type: 'GET',
- contentType: "application/json; charset=utf-8",
- success: function ( r )
- {
- if ( !isBind )
- {
- viewModel = ko.mapping.fromJS( r );
- isBind = true;
- ko.applyBindings( viewModel );
- } else
- {
- ko.mapping.fromJS( r, viewModel );
- }
- }
- } );
- }
- initPager();
- function initPager()
- {
- var getCountUrl = '/api/getpagecount';
- $.ajax( {
- url: getCountUrl,
- type: 'GET',
- contentType: "application/json; charset=utf-8",
- success: function ( r )
- {
- $( '#pager' ).pagination( r, {
- callback: function ( currentPageIndex )
- {
- loadTable( currentPageIndex );
- }
- } );
- }
- } );
- }
- } )( ko );
一个立即自执行函数 传入ko全局变量 , 函数里面定义了两个函数, initPager用于从server端取得商品数量并初始化pagination插件,pagination插件绑定点击页码时的回调函数,这里使用了默认的pagination设置,每页显示10个商品。loadTable用于从server端取得分页数据,接收一个参数用于指定当前获取第几页数据,数据获取成功,用ko.applyBindings绑定到页面渲染显示模板数据.注意这里为了偷懒使用了knockout的 mapping插件,具体用法请参考 http://knockoutjs.com/documentation/plugins-mapping.html。
html页面代码如下
- @{
- ViewBag.Title = "Test";
- }
- <style>
- .pagination {
- font-size: 80%;
- }
- .pagination a {
- text-decoration: none;
- border: solid 1px #AAE;
- color: #15B;
- }
- .pagination a, .pagination span {
- display: block;
- float: left;
- padding: 0.3em 0.5em;
- margin-right: 5px;
- margin-bottom: 5px;
- }
- .pagination .current {
- background: #26B;
- color: #fff;
- border: solid 1px #AAE;
- }
- .pagination .current.prev, .pagination .current.next {
- color: #999;
- border-color: #999;
- background: #fff;
- }
- </style>
- <table class="table table-hover" id="dataTable">
- <thead>
- <tr>
- <th>
- Id
- </th>
- <th>
- Name
- </th>
- <th>
- Category
- </th>
- <th>
- Price
- </th>
- </tr>
- </thead>
- <tbody data-bind="foreach:$root">
- <tr>
- <td data-bind="text:Id"></td>
- <td data-bind="text:Name"></td>
- <td data-bind="text:Category"></td>
- <td data-bind="text:Price"></td>
- </tr>
- </tbody>
- </table>
- <div>
- <div id="pager" class="pagination">
- </div>
- </div>
- @section scripts{
- <script src="~/Scripts/jquery.pagination.js"></script>
- <script src="~/Scripts/knockout-3.2.0.js"></script>
- <script src="~/Scripts/knockout.mapping-latest.js"></script>
- <script src="~/Scripts/list.js"></script>
- }
上面的js逻辑代码文件为list.js , 为了偷懒直接把pagination的样式copy到了html头部。
运行结果
knockoutjs+ jquery pagination+asp.net web Api 实现无刷新列表页的更多相关文章
- 杂项:ASP.NET Web API
ylbtech-杂项:ASP.NET Web API ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动设备)的 HTTP 服务. ASP.NET Web A ...
- A simple Test Client built on top of ASP.NET Web API Help Page
Step 1: Install the Test Client package Install the WebApiTestClient package from the NuGet Package ...
- 前端使用AngularJS的$resource,后端ASP.NET Web API,实现分页、过滤
在上一篇中实现了增删改查,本篇实现分页和过滤. 本系列包括: 1.前端使用AngularJS的$resource,后端ASP.NET Web API,实现增删改查2.前端使用AngularJS的$re ...
- On the nightmare that is JSON Dates. Plus, JSON.NET and ASP.NET Web API
Ints are easy. Strings are mostly easy. Dates? A nightmare. They always will be. There's different c ...
- 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用
由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.NET Web API 的书籍少之又少(我们看到的相关内容往往是某本介绍ASP.NET M ...
- 通过扩展让ASP.NET Web API支持W3C的CORS规范
让ASP.NET Web API支持JSONP和W3C的CORS规范是解决"跨域资源共享"的两种途径,在<通过扩展让ASP.NET Web API支持JSONP>中我们 ...
- ASP.NET Web API自身对CORS的支持:从实例开始
在<通过扩展让ASP.NET Web API支持W3C的CORS规范>中我们通过自定义的HttpMessageHandler为ASP.NET Web API赋予了跨域资源共享的能力,具体来 ...
- 通过Knockout.js + ASP.NET Web API构建一个简单的CRUD应用
REFERENCE FROM : http://www.cnblogs.com/artech/archive/2012/07/04/Knockout-web-api.html 较之面向最终消费者的网站 ...
- ASP.NET Web API 2 入门
本文参考:http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web ...
随机推荐
- ratina 视网膜屏幕解决方案大全
第三方教程 http://www.tuicool.com/articles/JBreIn 知乎 https://www.zhihu.com/question/21653056 强烈推荐!!!最牛逼最专 ...
- 修改sql数据库文件 物理文件名称
-- 允许配置高级选项 EXEC sp_configure 'show advanced options', 1 GO -- 重新配置 RECONFIGURE GO -- 启用xp_cmdshell ...
- C语言中的插入排序(2016-12-30)
直接插入排序: 算法思想:假设待排序的记录存放在数组R[1--n]中,初始时,i=1,R[1]自成一个有序区,无序区为R[2--n].然后从i=2起直到i=n,依次将R[i]插入当前的有序区R[1.. ...
- Sequence Project Showplan Operator 序列映射运算符
Sequence Project Showplan Operator 序列映射运算符 序列映射运算符会从一个已经排序的集合里通过不停添加集合里的列执行计算. 运算符根据一个或多个列的值把输入集合分为多 ...
- 通杀所有系统的硬件漏洞?聊一聊Drammer,Android上的RowHammer攻击
通杀所有系统的硬件漏洞?聊一聊Drammer,Android上的RowHammer攻击 大家肯定知道前几天刚爆出来一个linux内核(Android也用的linux内核)的dirtycow漏洞.此洞可 ...
- ABP理论学习之设置管理
返回总目录 本篇目录 介绍 定义设置 获取设置值 更改设置 关于缓存 介绍 每个应用程序都需要存储一些设置信息,然后在应用程序中的某个地方使用这些设置.ABP提供了健壮的基础设施来存储或检索服务端和客 ...
- ABP理论学习之数据过滤器
返回总目录 本篇目录 介绍 预定义过滤器 关闭过滤器 开启过滤器 设置过滤器参数 定义自定义过滤器 其他ORM 介绍 软删除模式通常用于不会真正从数据库删除一个实体而是仅仅将它标记为"已删除 ...
- 剑指Offer面试题:23.二叉树中和为某一值的路径
一.题目:二叉树中和为某一值的路径 题目:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.例如输入下图中二叉树和整数2 ...
- [.net 面向对象程序设计进阶] (16) 多线程(Multithreading)(一) 利用多线程提高程序性能(上)
[.net 面向对象程序设计进阶] (16) 多线程(Multithreading)(一) 利用多线程提高程序性能(上) 本节导读: 随着硬件和网络的高速发展,为多线程(Multithreading) ...
- Clang Format
1,最近项目代码要求规范化,在网上找了个Xcode插件:Clang Format ,下载地址:https://github.com/travisjeffery/ClangFormat-Xcode 2, ...