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}

 

你可能感兴趣的:(asp.net)