Jquery+JSon实现的Asp.net无刷新分页控件

控件类代码:

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Reflection;
using System.IO;

[assembly: WebResource(
"PageBarJS.js""application/x-javascript")]
namespace Hawkon.Control {
    [DefaultProperty(
"Text")]
    [ToolboxData(
"<{0}:PageBar runat=server></{0}:PageBar>")]
    
public class PageBar : WebControl {
        [Bindable(
true)]
        [Category(
"Data")]
        [DefaultValue(
"1")]
        [Localizable(
true)]
        
public int PageIndex {
            
get {
                
return pageIndex;
            }

            
set {
                pageIndex 
= value;
            }
        }
        
private int pageIndex;

        [Bindable(
true)]
        [Category(
"Data")]
        [DefaultValue(
"1")]
        [Localizable(
true)]
        
public int PageCount {
            
get {
                
return pageCount;
            }

            
set {
                pageCount 
= value;
            }
        }
        
private int pageCount;

        [Bindable(
true)]
        [Category(
"Data")]
        [DefaultValue(
"5")]
        [Localizable(
true)]
        
public int DisplayCount {
            
get {
                
return displayCount;
            }

            
set {
                displayCount 
= value;
            }
        }
        
private int displayCount;

        
protected override void RenderContents(HtmlTextWriter output) {

            
string html = "";
            html 
+= CreateA(1"<<");
            
int b = 0, e = 0;
            
if (pageIndex <= displayCount) {
                b 
= 1;
                e 
= displayCount * 2 + 1;
            }
            
else if (pageIndex > pageCount - displayCount) {

                b 
= pageCount - displayCount * 2;
                e 
= pageCount;
            }
            
else {
                b 
= pageIndex - displayCount;
                e 
= pageIndex + displayCount;
            }
            
if (b <= 1) {
                html 
+= CreateA(1"");
            }
            
else
                html 
+= CreateA(b - 1"");
            
for (int i = b; i <= e; i++) {

                html 
+= CreateA(i, i.ToString());

            }
            html 
+= CreateA(e + 1"");
            html 
+= CreateA(pageCount, ">>");
            
// html += string.Format("<script src='{0}' type='text/javascript'></script>",
            
//   this.Page.ClientScript.GetWebResourceUrl(typeof(PageBar), "JScript1.js"));
            output.Write(html);
        }
        
private string CreateA(int pageIndex, string text) {
            
if (pageIndex == this.pageIndex) {
                
return string.Format("<a class=\"pageA\" title='页'  id =\"{0}\">{1}</a>&nbsp;", pageIndex, text);
            }
            
return string.Format("<a class=\"pageA\" title='页' href=\"#\" id=\"{0}\">{1}</a>&nbsp;", pageIndex, text);

        }
        
protected override void OnPreRender(EventArgs e) {
            
base.OnPreRender(e);
            
string resourceName = "PageBarJS.js";
            
string url = this.Page.ClientScript.GetWebResourceUrl(this.GetType(), "PageBarJS.js");
            
string script = "\r\n<script src=\"" + HttpUtility.HtmlAttributeEncode(url) + "\" type=\"text/javascript\"></script>";
            
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), resourceName, script, false);
            script 
= @"<script type=""text/javascript"">$(document).ready(function() {InitPageBar(5, ""BookListByPage"", ""Books "",  50,""pageA"");});</script>";            this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "ready", script);            
        }
        
protected override void Render(HtmlTextWriter writer) {
            
base.Render(writer);
        }

    }
}

 

 JS资源文件代码:


var displayCount;
var getDataUrl;
var bookTableId;
var currentIndex;
var pageCount;
var linkClass;
var fields;
function InitPageBar(dc, gdu, btId,pc,lc) {
    displayCount 
= dc;
    getDataUrl 
= gdu;
    bookTableId 
= btId;
    currentIndex 
= 1;
    pageCount 
= pc;
    linkClass 
= "."+lc;
    $(linkClass).click(GetPage);
}
function GetPageById(id) {

    $(
"#CI").val(id);
    
var surl = getDataUrl+"?pageIndex=" + id;
    $.ajax({
        url: surl,
        type: 
"GET",
        dataType: 
"json",
        timeout: 
1000,
        success: showResult
    }
            );
}
function GetPage() {
    GetPageById($(
this).get(0).id);
}
function showResult(result) {
    
for (i = 1; i <= result.Data.length; i++) {
        
var id = "#" + bookTableId + " tr:nth-child(" + i + ")";
        obj 
= result.Data[i - 1];
        
for (var key in obj) {
            ctl 
= $(id).find("." + key);
            
if (ctl.length > 0) {
            ctl.get(
0).innerHTML = obj[key];
            }
        }
    }
    $(linkClass).each(
function(index) {
        
var i, b, e;

        
if (result.CurrentPageIndex <= displayCount) {
            b 
= 1;
            e 
= (displayCount + 1* 2;
            i 
= index - 2 + 1;
        }
        
else if (result.CurrentPageIndex > pageCount - displayCount) {

        b 
= pageCount - displayCount * 2;
        e 
= pageCount;
        i 
= pageCount - displayCount * 2 + index - 2;
        }
        
else {
            i 
= result.CurrentPageIndex - displayCount + index - 2;
            b 
= result.CurrentPageIndex - displayCount - 1;
            e 
= result.CurrentPageIndex + displayCount + 1;
        }
        
if ($(this).get(0).id == $(this).text()) {
            $(
this).text(i);
        }
        
else if (index == 1) {
            
if (b <= 1) {

                $(
this).get(0).id = 1;

            }
            
else {
                $(
this).get(0).id = b - 1;
            }
        }
        
else if (index == displayCount * 2 + 3) {
            $(
this).get(0).id = e;
        }

        $(
this).attr("href""#");

        
if ((i >= b) && (i <= e)) {
            $(
this).get(0).id = i;
        }

        
if ($(this).text == result.CurrentPageIndex) {
            $(
this).removeAttr("href");
        }
    });
    currentIndex 
= result.CurrentPageIndex;

}

 

 

    <form runat="server" id="form1">
    
<div>
    
<asp:Repeater ID="rptBooks" runat="server">
        
<HeaderTemplate>
            
<table id="Books" width="90%" cellspacing="0" style="font-size:12px;">
                
<tr>
                    
<th>
                        书名
                    
</th>
                    
<th>
                        作者
                    
</th>
                    
<th>
                        类别
                    
</th>
                    
<th width="30px">
                        
                    
</th>
                    
<th width="30px">
                        
                    
</th>
                
</tr>
                
<tbody id="Data">
                    
<tr>
        
</HeaderTemplate>
        
<ItemTemplate>
            
<td class="Title">
                
<%Eval("Title"%>
            
</td>
            
<td class="Author">
                
<%Eval("Author"%>
            
</td>
            
<td class="CategoryName">
                
<%Eval("Categories.Name")%>
            
</td>
            
<td>
                
<href="#" id='<%# Eval("Id") %>' class="delBook">删除</a>
            
</td>
            
<td>
                
<href='BookDetail/<%# Eval("Id") %>' class="details">详细</a>
            
</td>
        
</ItemTemplate>
        
        
<SeparatorTemplate>
            
</tr><tr>
        
</SeparatorTemplate>
        
<FooterTemplate>
            
</tr></tbody>
            
<tr>
                
<td colspan="3">
            
<cc1:PageBar ID="PageBar1" runat="server" PageCount="100" DisplayCount="5" PageIndex="1"  />
                    
<input type="text" id = "CI" />
                
</td>
                
</td>
            
</tr>
            
</table>
        
</FooterTemplate>
    
</asp:Repeater>
    
</div>
    
</form>

 

 Ajax请求地址返回的JSON数据:

{"Data":[{"Title":"C#.NET程序设计——国外计算机科学经典教材","CategoryName":".NET","Author":"布拉德利(Bradley,J.C.),米尔斯波(Millspaugh,A.C.)  著, 天宏工作室  译","Id":5392},{"Title":"C#2.0〔宝典)(附盘)","CategoryName":"C C++ VC VC++","Author":"张立  编著","Id":5027},{"Title":"C#2.0完全自学手册(附CD)","CategoryName":"C C++ VC VC++","Author":"张立 等编著","Id":5081},{"Title":"C#2005数据库编程经典教程","CategoryName":"C C++ VC VC++","Author":"(美)沃顿(Karli watton)  著,陈秋萍  译","Id":4983},{"Title":"C#程序设计教程——计算机基础课程系列教材","CategoryName":"C C++ VC VC++","Author":"郑阿奇,梁敬东  主编","Id":5127},{"Title":"C#程序员参考手册","CategoryName":"C C++ VC VC++","Author":"Grant Palmer 著,康博 译","Id":5132},{"Title":"C#和.NET核心技术——开发人员专业技术丛书","CategoryName":"C C++ VC VC++","Author":"(美)佩里(Perry,S.C.)  著,肖斌  等译","Id":5104},{"Title":"C#基础与实例教程(附CD-ROM光盘一张)","CategoryName":"C C++ VC VC++","Author":"郝春强  编著","Id":5071},{"Title":"C#软件项目开发全程剖析","CategoryName":"C C++ VC VC++","Author":"(德)侯姆,(德)克鲁格,(德)斯普达 著,薛兴涛,袁勤勇 译","Id":5034},{"Title":"C#设计模式——开发大师系列","CategoryName":"C C++ VC VC++","Author":"(美)麦斯科 著,颜炯 译","Id":4954}],"CurrentPageIndex":15,"PageCount":1074}

 

posted @ 2009-11-03 17:33  Hawkon  阅读(701)  评论(0编辑  收藏  举报