knockout 分页 Demo +mvc+bootstrap

最近工作中web客户端需要用到knockout,在此记录下一些Demo,以后用到的时候查找起来方便。也希望给新入门的knockout使用者一点经验。knockout官方文档。这儿是一个使用knockout分页的小demo,使用的框架是mvc,javascript框架有jquery,knockout,bootstrap。

先上效果图

   前台view

  1 @{
  2     //这儿去除该页面的模板页。防止jquery多次引用,当然也可以不去除,下面jquery就可以不用引用了。
  3
  4     Layout = null;
  5 }
  6
  7 @*先引用jquery,然后应用knockout,因为knockout依赖于jquery*@
  8 <script src="~/Scripts/jquery-1.10.2.js"></script>
  9 <script src="~/Scripts/knockout-3.2.0.js"></script>
 10
 11
 12 @*bootstrap,集成到mvc里面的前端开发框架 (官网:http://www.bootcss.com/)*@
 13 <link href="~/Content/bootstrap.css" rel="stylesheet" />
 14 <script src="~/Scripts/bootstrap.js"></script>
 15
 16
 17
 18 <div style="margin:auto;width:500px;text-align:center">
 19
 20
 21     <div style="margin-top:50px">
 22         <ul data-bind="foreach:items" style="list-style-type:none">
 23             <li>
 24                 <span>Title</span> <span data-bind="text:Title"></span>
 25                 <span>Content</span><span data-bind="text:Content"></span>
 26             </li>
 27         </ul>
 28     </div>
 29
 30     <div>
 31         <button type="button" class="btn btn-primary" data-bind="click:first">
 32              第一页
 33         </button>
 34         <button type="button" class="btn btn-success" data-bind="click:previous">
 35              上一页
 36         </button>
 37         <button type="button" class="btn btn-info" data-bind="click:next">
 38              下一页
 39         </button>
 40         <button type="button" class="btn btn-warning" data-bind="click:last">
 41             最后一页
 42         </button>
 43     </div>
 44
 45     <div style="margin-top:20px" data-bind="foreach:pageNumbers" class="btn-group" role="group">
 46         <button data-bind="text:$data,click:$root.gotoPage" type="button" class="btn btn-default">
 47         </button>
 48     </div>
 49
 50 </div>
 51 @*注意将脚本放在html 代码的下面*@
 52 <script type="text/javascript">
 53     function NewsPage() {
 54         //viewModel本身。用来防止直接使用this的时候作用域混乱
 55         var self = this;
 56         //数据
 57         this.items = ko.observableArray();
 58         //要访问的页码
 59         this.pageIndex = ko.observable(1);
 60         //总计页数
 61         this.pageCount = ko.observable(1);
 62         //页码数
 63         this.pageNumbers = ko.observableArray();
 64         //当前页
 65         this.currengePage = ko.observable(1);
 66         this.refresh = function () {
 67             //限制请求页码在该数据页码范围内
 68             if (self.pageIndex() < 1)
 69                 self.pageIndex(1);
 70             if (self.pageIndex() > self.pageCount()) {
 71                 self.pageIndex(self.pageCount());
 72             }
 73             //post异步加载数据
 74             $.post(
 75                 "/PageList/PageList",
 76                 {
 77                     pageIndex: self.pageIndex()
 78                 },
 79                 function (data) {
 80                     // 加载新的数据前,先移除原先的数据
 81                     self.items.removeAll();
 82                     self.pageNumbers.removeAll();
 83                     self.pageCount(data.PageCount)
 84                     for (var i = 1; i < data.PageCount; i++) {
 85                         //装填页码
 86                         self.pageNumbers.push(i);
 87                     }
 88                     //for...in 语句用于对数组或者对象的属性进行循环操作。
 89                     //for ... in 循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作。
 90                     for (var i in data.PagedData) {
 91                         //装填数据
 92                         self.items.push(data.PagedData[i]);
 93                     }
 94                 }, "json"
 95                             )
 96         }
 97         //请求第一页数据
 98         this.first = function () {
 99             self.pageIndex(1);
100             self.refresh();
101         }
102         //请求下一页数据
103         this.next = function () {
104             self.pageIndex(this.pageIndex() + 1);
105             self.refresh();
106
107         }
108         //请求先前一页数据
109         this.previous = function () {
110             self.pageIndex(this.pageIndex() - 1);
111             self.refresh();
112         }
113         //请求最后一页数据
114         this.last = function () {
115             self.pageIndex(this.pageCount() - 1);
116             self.refresh();
117         }
118         //跳转到某页
119         this.gotoPage = function (data, event) {
120             self.pageIndex(data);
121             self.refresh();
122         }
123         this.refresh();
124     }
125     var viewModel = new NewsPage();
126     ko.applyBindings(viewModel);
127 </script>

后台controller

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

namespace KnockOutPageDemo.Controllers
{
    public class PageListController : Controller
    {
        // GET: PageList
        public ActionResult Index()
        {
            return View();
        }
        /// <summary>
        /// 异步请求的分页数据,返回一个json对象
        /// </summary>
        /// <returns></returns>
        public ActionResult PageList()
        {
            //请求的页码
            int pageIndex = int.Parse(Request.Form["pageIndex"]);
            //每页显示多少条数据
            int pageSize = 10;
            //取到请求页码的数据
            List<News> news = GetNewsData().Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
            //获取总的数据行数
            int rowCount = GetNewsData().Count();
            //构建数据模型
            PageModel pageData = new PageModel()
            {
                PageIndex = pageIndex,
                PagedData = news,
                PageCount = rowCount / pageSize

            };
            //返回数据
            return Json(pageData, JsonRequestBehavior.AllowGet);
        }
        public List<News> GetNewsData()
        {
            List<News> news = new List<News>();
            for (int i = 0; i < 30; i++)
            {
                news.Add(new News { Title = "天黑黑", Content = "路上小心" });
                news.Add(new News { Title = "雨滂滂", Content = "记得带伞" });
                news.Add(new News { Title = "人熙熙", Content = "快点回家" });
            }
            return news;
        }
    }

    //分页数据实体
    public class PageModel
    {//请求页码的数据
        public List<News> PagedData { get; set; }
        //请求的页码
        public int PageIndex { get; set; }
        //页码的大小
        public int PageSize { get; set; }
        //总页数
        public int PageCount { get; set; }
        //总行数
        public int RowCount { get; set; }
    }
    //新闻模型
    public class News
    {
        public string Title { get; set; }
        public string Content { get; set; }
    }
}

时间: 2024-10-21 14:33:53

knockout 分页 Demo +mvc+bootstrap的相关文章

MVC+Bootstrap+Drapper使用PagedList.Mvc支持多查询条件分页

前几天做一个小小小项目,使用了MVC+Bootstrap,以前做分页都是异步加载Mvc部分视图的方式,因为这个是小项目,就随便一点.一般的列表页面,少不了有查询条件,下面分享下Drapper+PagedList.Mvc支持多查询条件分页的使用经验. 在MVC中我们一般习惯使用强类型Model,通过分析Orders的展示页面,来构建这个Model. 1.查询参数的Model public class OrderQueryParamModel { /// <summary> /// 订单编号 //

SpringMVC学习系列(12) 完结篇 之 基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现

到这里已经写到第12篇了,前11篇基本上把Spring MVC主要的内容都讲了,现在就直接上一个项目吧,希望能对有需要的朋友有一些帮助. 一.首先看一下项目结构: InfrastructureProjects:是抽取出的基础项目,主要封装了一些通用的操作. SpringMVC3Demo:就是管理系统所在的项目. WeiXinAPI:是之前做微信管理平台测试时封装一些操作,如果不需要把该项目移除即可. 注:项目的前端UI框架用的是国外的一个基于Bootstrap框架的开发的Demo,如不需要替换为

分享基于EF+MVC+Bootstrap的通用后台管理系统及架构(转)

http://www.cnblogs.com/guozili/p/3496265.html 基于EF+MVC+Bootstrap构建通用后台管理系统,集成轻量级的缓存模块.日志模块.上传缩略图模块.通用配置及服务调用, 提供了OA.CRM.CMS的原型实例,适合快速构建中小型互联网及行业Web系统,且能作为代码实践及参考,欢迎提出意见. Demo预览 点击在线预览 admin/111111 请勿删数据 Framework 业务无关的底层通用机制及功能 Model基类:提供数据传输和底层的最基本的

分享基于EF+MVC+Bootstrap的通用后台管理系统及架构

原文来源:http://www.cnblogs.com/guozili/p/3496265.html 基于EF+MVC+Bootstrap构建通用后台管理系统,集成轻量级的缓存模块.日志模块.上传缩略图模块.通用配置及服务调用, 提供了OA.CRM.CMS的原型实例,适合快速构建中小型互联网及行业Web系统,且能作为代码实践及参考,欢迎提出意见. Demo预览 点击在线预览 admin/111111 请勿删数据 Framework 业务无关的底层通用机制及功能 Model基类:提供数据传输和底层

asp.net EF+MVC+Bootstrap 通用后台管理系统

开发环境: VS2012或以上 数据库: SQL Server 2008R2或以上 基于EF+MVC+Bootstrap构建通用后台管理系统,集成轻量级的缓存模块.日志模块.上传缩略图模块.通用配置及服务调用, 提供了OA.CRM.CMS的原型实例,适合快速构建中小型互联网及行业Web系统   Framework 业务无关的底层通用机制及功能 Model基类:提供数据传输和底层的最基本的基类及接口 DAL底层:基于EF code first,提供Repository泛型方法及写历史日志 Unti

ASP.NET MVC使用Bootstrap系列(5)——创建ASP.NET MVC Bootstrap Helpers

序言 ASP.NET MVC允许开发者创建自定义的HTML Helpers,不管是使用静态方法还是扩展方法.一个HTML Helper本质上其实是输出一段HTML字符串. HTML Helpers能让我们在多个页面上公用同一段HTML标记,这样不仅提高了稳定性也便于开发者去维护.当然对于这些可重用的代码,开发者也方便对他们进行单元测试.所以,创建ASP.NET MVC Bootstrap Helpers是及其有必要的. 内置的HTML Helpers ASP.NET MVC内置了若干标准HTML

ASP.NET MVC Bootstrap极速开发框架

前言 每次新开发项目都要从头开始设计?有木有一个通用的快速开发框架?并且得是ASP.NET MVC  And Bootstrap?数据库不要手工创建?框架对未来业务支持的扩展性好?这么简单的功能还需要一天搭建基础环境?能不能只关心我所需要的业务? 有这样的一个项目,基于ASP.NET MVC.EntityFramework.Memcached.Bootstrap的快速项目开发框架,只需3秒钟即可创建一个带有简单用户管理的项目. 一键安装 懒人一键安装包下载地址,双击“install.bat”批处

Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理

这是本人第一次写,写的不好的地方还忘包含.写这个的主要原因是翔通过这个来学习下EF的CodeFirst模式,本来也想用AngularJs来玩玩的,但是自己只会普通的绑定,对指令这些不是很熟悉,所以就基本不用了.还有最主要的原因就是锻炼下自己的能力.好了其他就不多说了,下面来看下我对这个项目的整体概述吧: 目录: 目录我以后会在这边添加上去的 一.Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理 基本设计 项目中使用到的工具: Visual Studio 2013,

ASP.NET MVC+Bootstrap个人博客之praise.js点赞特效插件

1. 为啥要做这个点赞插件?    praise.js是一款小巧的jQuery点赞插件,使用简便,效果美观. 在做个人博客时遇到了文章点赞问题.联想到各大社交网络中的点赞特效:手势放大.红心放大等等,很酷很炫.但是并没有现成的好用的插件,于是就打算自己做一个类似的点赞插件,放上自己喜欢的点赞图标. 先来看一下效果图吧:也可以去我的博客站 www.zynblog.com亲身体验一下. 注:(博客地址:www.zynblog.com,采用ASP.NET MVC + Bootstrap搭建) 2. 插