ASP.NET Ajax简单的无刷新分页
最近练习了一些AJAX无刷新分页,写得比较简单,性能不知道怎么样,求大神指点,如有更好的分页提供,欢迎交流!
发话不多说了,直接上代码!
首先从网上下了一个JS分页,感觉挺好用的
(function($) {
//设定页码方法,初始化
$.fn.setPager = function(options) {
//合并PagerDefaults和options
var opts = $.extend({}, pagerDefaults, options);
return this.each(function() {
//修改,能够动态设置PageSize
pagerDefaults.PageSize = options.PageSize;
//先清空后添加(调用自定义的setPagerHtml方法)
$(this).empty().append(setPagerHtml(parseInt(options.RecordCount), parseInt(options.PageIndex), options.buttonClick));
$('.pager a').mouseover(function() { document.body.style.cursor = "pointer"; }).mouseout(function() { document.body.style.cursor = "auto"; });
});
};
//设定页数及html
//参数1:总条目数
//参数2:当前页
//参数3:页码按钮
function setPagerHtml(RecordCount, PageIndex, pagerClick) {
//调用pager样式表
var $content = $("<div class=\"pager\"></div>");
//起始页
var startPageIndex = 1;
//若没有条目数,则按 pagerDefaults.PageSize = options.PageSize;选择的条目数来算
if (RecordCount <= 0) RecordCount = pagerDefaults.PageSize;
//页尺寸
var PageSize = pagerDefaults.PageSize;
//alert(pagerDefaults.PageSize);
//末页
var endPageIndex = parseInt(RecordCount % parseInt(PageSize)) > 0 ? parseInt(RecordCount / parseInt(PageSize)) + 1 : RecordCount / parseInt(PageSize);
//当前页若大于末页,则等于末页
if (PageIndex > endPageIndex) PageIndex = endPageIndex;
//当前页小于0,则等于起始页
if (PageIndex <= 0) PageIndex = startPageIndex;
//下一页
var nextPageIndex = PageIndex + 1;
//上一页
var prevPageIndex = PageIndex - 1;
//当前页等于首页
if (PageIndex == startPageIndex) {
//生成不能点击的首页和上一页
$content.append($("<span>首页</span>"));
$content.append($("<span>上一页</span>"));
} else {
//生成一个首页和上一页按钮
$content.append(renderButton(RecordCount, 1, pagerClick, "首页"));
$content.append(renderButton(RecordCount, prevPageIndex, pagerClick, "上一页"));
}
//这里判断是否显示页码
if (pagerDefaults.ShowPageNumber) {
// var html = "";
//页码部分隐藏 只显示中间区域
if (endPageIndex <= 5 && PageIndex <= 5) {
for (var i = 1; i <= endPageIndex; i++) {
if (i == PageIndex) {
//生成不可点击的页码,也可用于设置样式,加粗
$content.append($("<span>" + i + "</span>"));
} else {
//生成可点击的页码
$content.append(renderButton(RecordCount, i, pagerClick, i));
}
}
}
//生成< 首页 上一页 ...3 4 5 6 7 下一页 末页 >格式
else if (endPageIndex > 5 && endPageIndex - PageIndex <= 2) {
$content.append($("<a>...</a>"));
for (var i = endPageIndex - 4; i <= endPageIndex; i++) {
if (i == PageIndex) {
$content.append($("<span>" + i + "</span>"));
} else {
$content.append(renderButton(RecordCount, i, pagerClick, i));
}
}
}
//生成< 首页 上一页 ... 2 3 4 5 6 ... 下一页 末页 >格式
else if (endPageIndex > 5 && PageIndex > 3) {
$content.append($("<a>...</a>"));
for (var i = PageIndex - 2; i <= PageIndex + 2; i++) {
if (i == PageIndex) {
$content.append($("<span>" + i + "</span>"));
} else {
$content.append(renderButton(RecordCount, i, pagerClick, i));
}
}
$content.append($("<a>...</a>"));
}
//生成< 首页 上一页 1 2 3 4 5 ... 下一页 末页 >格式
else if (endPageIndex > 5 && PageIndex <= 3) {
for (var i = 1; i <= 5; i++) {
if (i == PageIndex) {
$content.append($("<span>" + i + "</span>"));
} else {
$content.append(renderButton(RecordCount, i, pagerClick, i));
}
}
$content.append($("<a>...</a>"));
}
}
//当前页等于末页
if (PageIndex == endPageIndex) {
//生成不能点击的下一页和末页
$content.append($("<span>下一页</span>"));
$content.append($("<span>末页</span>"));
} else {
//生成一个下一页和末页按钮
$content.append(renderButton(RecordCount, nextPageIndex, pagerClick, "下一页"));
$content.append(renderButton(RecordCount, endPageIndex, pagerClick, "末页"));
}
//返回生成的分页
return $content;
}
//生成页码
//参数1:总条目数
//参数2:指定页
//参数3:页码按钮
//参数4:指定页文本
function renderButton(recordCount, goPageIndex, EventHander, text) {
var $goto = $("<a title=\"第" + goPageIndex + "页\">" + text + "</a>\"");
$goto.click(function() {
EventHander(recordCount, goPageIndex, pagerDefaults.PageSize);
});
return $goto;
}
//pagerDefaults变量
var pagerDefaults = {
//
DefaultPageCount: 1,
//当前页
DefaultPageIndex: 1,
//总条目数
PageSize: 20,
//是否显示页码
ShowPageNumber: true
};
})(jQuery);
JS
Theatrelist1.aspx前台页面代码,注意AJAX请求不能想自身后台(Theatrelist1.aspx.cs)发送请求,这样是获取不到的!所以只能发送给一般处理程序(ajaxPage.ashx)
<script src="js/jquery-1.7.1.min.js" type="text/javascript"></script>
<script src="js/JqueryPage.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
//初始化
GetData(1, 1);
});
function InitPager(RecordCount, PageIndex, PageSize, Data) {
$("#Pager").setPager({ RecordCount: RecordCount, PageIndex: PageIndex, PageSize: PageSize, buttonClick: PageClick });
}
//页码按钮
//参数1:总条目数
//参数2:当前页
//参数3:页尺寸
PageClick = function(RecordCount, PageIndex, PageSize) {
GetData(PageSize, PageIndex);
};
//ajax请求响应
//参数1:页尺寸
//参数2:当前页
function GetData(PageSize, PageIndex) {
$.ajax({
url: 'ajaxPage.ashx',
Type: "post",
contentType: "application/json",
data: 'PageSize=' + PageSize + '&PageIndex=' + PageIndex,
success: function(data, status) {
$("#list").empty();
var i = 0;
for (i = 0; i < data.length-1; i++) {
var li = $("<li><a href=Theatrecontent.aspx?id=" + data[i].ID + ">" + data[i].Title + "</a><span>" + data[i].Time + "</span></li>");
$("#list").append(li);
}
$("#Pager").setPager({ RecordCount: data[i].Count, PageIndex: PageIndex, PageSize: PageSize, buttonClick: PageClick });
}
});
}
</script>
<!--截取主要的部分而已-->
<div class="o_l_list">
<p class="o_p_h">
剧院之窗..............................................................................</p>
<ul id="list">
</ul>
<p id="Pager" align="center">
</p>
</div>
HTML
简单的CSS样式
.pager span
{
position:relative;
margin-right:5px;
color:Gray;
text-align:center;
line-height:50px;
} .pager a
{
position:relative;
margin-right:5px;
text-align:center;
line-height:50px;
}
CSS
ajaxPage.ashx页面代码
<%@ WebHandler Language="C#" Class="ajaxPage" %> using System;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Web.Script.Serialization;
using System.Collections.Generic; public class ajaxPage : IHttpHandler { public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "application/json";
BindData_Newslist(context);
} public bool IsReusable {
get {
return false;
}
} #region 绑定
/// <summary>
/// 剧院之窗列表
/// </summary>
private void BindData_Newslist(HttpContext context)
{
//页尺寸
int pageSize = Convert.ToInt32(context.Request["PageSize"]);
//当前页
int pageIndex = Convert.ToInt32(context.Request["PageIndex"]); //总条目数
string Count = ""; //链接数据库
string conString = ConfigurationSettings.AppSettings["DBConnStr"];
SqlConnection con = new SqlConnection(conString); //打开数据库
con.Open(); //page是存储过程
SqlCommand cmd = new SqlCommand("page", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@pageSize", pageSize);
cmd.Parameters.Add("@pageIndex", pageIndex);
//SqlParameter sqlcount = new SqlParameter("@count", SqlDbType.Int);
//sqlcount.Direction = ParameterDirection.Output;
//cmd.Parameters.Add(sqlcount);
cmd.Parameters.Add("@count", );
//声明为输出参数
cmd.Parameters["@count"].Direction = ParameterDirection.Output; SqlDataAdapter adpt = new SqlDataAdapter(cmd as SqlCommand);
DataSet ds = new DataSet();
adpt.Fill(ds);
List<Table> list = new List<Table>();
DataTable dt = ds.Tables[];
Count = cmd.Parameters["@count"].Value.ToString();
//Count = sqlcount.Value.ToString();
int i = ;
for (i = ; i < dt.Rows.Count; i++)
{
list.Add(new Table()
{
ID = dt.Rows[i]["id"].ToString(),
Title = dt.Rows[i]["title"].ToString(),
Time = dt.Rows[i]["Time"].ToString()
});
}
list.Add(new Table() { Count = Count }); //序列化输出
JavaScriptSerializer jss = new JavaScriptSerializer();
context.Response.Write(jss.Serialize(list));
context.Response.End();
} public class Table
{
public string ID { get; set; }
public string Title { get; set; }
public string Time { get; set; }
public string Count { get; set; }
} #endregion }
C#
实现简单分页的存储过程
USE [Jopera]
GO
/****** Object: StoredProcedure [dbo].[page] Script Date: 08/31/2013 10:09:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[page]
--页尺寸
@pageSize int, --当前页
@pageIndex int, --总条目数
@count int output
AS
set @count=(select count(*) from Theatre where State=1)
select id,title,[Time]
from (select id,title,[Time],
ROW_NUMBER() over(order by Time DESC) as num
from Theatre
where State=1) T
where (T.num>@pageSize*(@pageIndex-1)) and (T.num<=@pageSize*@pageIndex)
SQL
最终效果页面

ASP.NET Ajax简单的无刷新分页的更多相关文章
- jquery ajax php+mysql 无刷新分页 详细实例
最近在接触jquery和ajax,当前项目也会用到分页,为了用户体验更好一些,就准备用无刷新分页,这个demo很适合新手学习查看,写的比较清晰,话不多说,直接上代码吧. 首先是html页面,index ...
- TP2.0或3.1 或者 3.2 下使用ajax+php做无刷新分页(转+自创)
1.前言 作为一名php程序员,我们开发网站主要就是为了客户从客户端进行体验,在这里,thinkphp框架自带的分页类是每次翻页都要刷新一下整个页面,这种翻页的用户体验显然是不太理想的,我们希望每次翻 ...
- Bootstrap Paginator分页插件+ajax 实现动态无刷新分页
之前做分页想过做淘宝的那个,但是因为是后台要求不高,就Bootstrap Paginator插件感觉还蛮容易上手,所以就选了它. Bootstrap Paginator分页插件下载地址: Downlo ...
- jquery+ajax(用ajax.dll)实现无刷新分页
利用ajax.dll那种方式的无刷新,在这就不说了,新朋友可以看下我的另一片文件http://www.cnblogs.com/dachuang/p/3654632.html 首先,这里用的是jquer ...
- asp.net中利用Jquery+Ajax+Json实现无刷新分页(二)
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="PageTest.aspx.cs ...
- ajax实现的无刷新分页代码实例
一.html代码部分: <table class="table style-5"> <thead id="t_head"> ...
- 关于Ajax无刷新分页技术的一些研究 c#
关于Ajax无刷新分页技术的一些研究 c# 小弟新手,求大神有更好的解决方案,指教下~ 以前做项目,用过GridView的刷新分页,也用过EasyUI的封装好的分页技术,最近在老项目的基础上加新功能, ...
- 本篇文章主要是对jquery+ajax+C#实现无刷新操作数据库数据的简单实例进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
我们知道同步执行和异步执行的区别,为了更好的提高用户的体验,我们都会采用异步方式去处理一些问题,毕竟单线程的同步可能回造成卡死等现象,很不友好,所以可以使用ajax来完成用户的体验,现在我们就来说说如 ...
- ASP.NET中无刷新分页
上次介绍了我们代码写的刷新分页,这次就来说说无刷新分页. 这次我们是在上次的基础上改动了一些,我们都知道想要无刷新,就需要Ajax,在我们的ASP.NET中AJax是和一般处理程序配合着用的. 无刷新 ...
随机推荐
- LVS测试小结
RedHat5实现负载均衡 http://blog.sina.com.cn/s/blog_4e424e2101007rie.html http://www.doc88.com/p-9975618478 ...
- [转]AsyncDisplayKit 教程:达到 60 FPS 的滚动帧率
[原文:https://github.com/nixzhu/dev-blog/blob/master/2014-11-22-asyncdisplaykit-tutorial-achieving-60- ...
- 浅析jQuery框架与构造对象
这是一些分析jQuery框架的文字 面向的读者应具备以下要求 1.非常熟悉HTML 2.非常熟悉javascript语法知识 3.熟悉javascript面向对象方面的知识 4.熟练使用jQue ...
- 10 款精美的 CSS3 全新特效
大家都知道,在网页制作时使用CSS技术,可以有效地对页面的布局.字体.颜色.背景和其它效果实现更加精确的控制.只要对相应的代码做一些简单的修改,就可以改变同一页面的不同部分,或者页数不同的网页的外观和 ...
- Android-----使用Button特效 selector+shape
当然除了使用drawable这样的图片外今天谈下自定义图形shape的方法,对于Button控件Android上支持以下几种属性shape.gradient.stroke.corners等. 我们就以 ...
- 在android market发布个人免费应用的步骤
写了一段时间的android应用了,只是在自己手机上面安装. 上周申请了android developer,需要一次性25美元的程序开发注册费用.费用需要用google checkout,所以还要先申 ...
- iOS开发——UI篇Swift篇&UITextView
UITextView 一:UITextView使用及其属性的设置 titleLabel.text = titleString //创建UITextView对象 textView = UITextVie ...
- mobile响应式页面meta信息相关记录
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scal ...
- 深入解析ext2文件系统之mke2fs
上一遍博文的重点其实将ext2整体的组织框架,我们知道了ext2文件系统由块组组成,每个块组里面的组织形式.我们甚至直接把超级块和组描述符里面的内容,用十六进制形式展现了出来.这篇博文主要讲述如何 ...
- Linux中的svn客户端RabbitVCS-2
我们都知道,自从svn出道以来,很多人都预言,cvs将会被其取代.就如同他们预言maven要取代ant一样.可见,svn的流行.在Windows中,最常用到的开源免费的svn客户端就是Tortoise ...