客户端脚本简单实现Repeater的无刷新分页 repeater分页控件

最近有朋友在问,如果不使用ajax.net,ajaxpro等等开发包,有没有别的办法写客户端脚本让Repeater实现无刷新分页,答案当然是有的。其他那些开发包无非是帮我们完成好了回发的各种接口,可是,开发包面向的是通用的情况,然不得已需要引入的脚本库有相当的容量,但我们不需要全部,现介绍一种最轻量级的无刷新分页办法(以Repeater为例)。

首先说一下实现的依据,asp.net中有这样一个方法GetCallbackEventReference。它的作用是获取一个对客户端函数的引用;调用该函数时,将启动一个对服务器事件的客户端回调。先可以不用理解透这句话的意思,只需要记住它能获取一段脚本,让客户端调用后实现回发到服务端。废话不多说了,赶紧跟着操作如下:

建立一个WebSite,当然你要用WebProject也无妨,然后增加一个WebForm,假定名为default。

default.aspx内容是

1<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default"

2

3%>

4

5<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"

6

7"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

8<htmlxmlns="http://www.w3.org/1999/xhtml">

9<headrunat="server">

10<title>CallBack</title>

11

12<scriptlanguage="javascript"type="text/javascript">

13functionturnPage(pageIndex){

14CallServer(pageIndex,'content');

15}

16

17functionReceiveCallback(arg,context){

18varcontainer=document.getElementById(context);

19//alert(arg+""+context);

20container.innerHTML=arg;

21}

22</script>

23

24</head>

25<body>

26<formid="form1"runat="server">

27<divid="content">

28<asp:RepeaterID="List"runat="server"OnItemDataBound="List_ItemDataBound">

29<ItemTemplate>

30<div>

31用户名:<asp:LabelID="NickName"runat="server"></asp:Label>

32QQ号:<asp:LabelID="QNumber"runat="server"></asp:Label>

33</div>

34</ItemTemplate>

35</asp:Repeater>

36</div>

37<asp:LiteralID="Pager"runat="server"></asp:Literal>

38</form>

39</body>

40</html>

default.aspx.cs内容是

1  usingSystem;

2  usingSystem.Data;

3  usingSystem.Web;

4  usingSystem.Text;

5  usingSystem.Web.UI;

6  usingSystem.Web.UI.HtmlControls;

7  usingSystem.Web.UI.WebControls;

8  usingSystem.IO;

9  usingSystem.Globalization;

10

11  publicpartialclass_Default:System.Web.UI.Page,System.Web.UI.ICallbackEventHandler

12  {

13  //每页显示记录数

14  staticintPAGESIZE=4;

15  DataTabledt=null;

16  privateintcurrentPageIndex;

17  protectedvoidPage_Load(objectsender,EventArgse)

18    {

19  if(!IsPostBack)

20    {

21  BindList(1,true);

22  //获取用于回调的

23  stringcallbackReference=ClientScript.GetCallbackEventReference(this,"arg",

24

25  "ReceiveCallback","context",false);

26  stringcallbackScript=string.Format("functionCallServer(arg,context){{{0}

27

28  }}",callbackReference);

29  ClientScript.RegisterClientScriptBlock(this.GetType(),"CallServer",

30

31  callbackScript,true);

32

33  }

34  }

35

36  ///<summary>

37  ///绑定列表

38  ///</summary>

39  ///<paramname="pageIndex">翻页页码</param>

40  ///<paramname="needRender">是否需要重画分页面码</param>

41  protectedvoidBindList(intpageIndex,boolneedRender)

42  {

43  DataTabledt=GetData();

44  //计算总页数

45  intpages=(dt.Rows.Count%PAGESIZE==0)?dt.Rows.Count/PAGESIZE:

46

47  (dt.Rows.Count/PAGESIZE)+1;

48  if(needRender)

49  RenderPager(pages);

50

51  if(pageIndex>pages)

52  pageIndex=pages;

53  elseif(pageIndex<1)

54  pageIndex=1;

55  intstartId=(pageIndex-1)*PAGESIZE+1;

56  intendId=pageIndex*PAGESIZE;

57

58  DataRow[]rows=dt.Select(string.Format("id>={0}andid<={1}",startId,endId));

59  List.DataSource=rows;

60  List.DataBind();

61  }

62

63  ///<summary>

64  ///画出分页页码

65  ///</summary>

66  ///<paramname="pages"></param>

67  protectedvoidRenderPager(intpages)

68  {

69  StringBuildersb=newStringBuilder();

70  intpageIndex=1;

71  do

72    {

73  sb.AppendFormat("<ahref='javascript:turnPage({0});'>{0}</a>&nbsp;&nbsp;",

74

75  pageIndex);

76  }while(pageIndex++<pages);

77

78  Pager.Text=sb.ToString();

79  }

80

81  ///<summary>

82  ///初始化一个DataTable作数据源

83  ///</summary>

84  protectedDataTableGetData()

85  {

86  if(null==Cache["Data"])

87    {

88  dt=newDataTable();

89  dt.Columns.Add("ID",typeof(int));

90  dt.Columns.Add("NickName",typeof(string));

91  dt.Columns.Add("QNumber",typeof(string));

92

93  DataRowrow=dt.NewRow();

94  row["ID"]=1;

95  row["NickName"]="人物1";

96  row["QNumber"]="21243468";

97  dt.Rows.Add(row);

98

99  row=dt.NewRow();

100  row["ID"]=2;

101  row["NickName"]="人物2";

102  row["QNumber"]="9058307";

103  dt.Rows.Add(row);

104

105  row=dt.NewRow();

106  row["ID"]=3;

107  row["NickName"]="人物3";

108  row["QNumber"]="21243468";

109  dt.Rows.Add(row);

110

111  row=dt.NewRow();

112  row["ID"]=4;

113  row["NickName"]="人物4";

114  row["QNumber"]="22526451";

115  dt.Rows.Add(row);

116

117  row=dt.NewRow();

118  row["ID"]=5;

119  row["NickName"]="人物5";

120  row["QNumber"]="254852182";

121  dt.Rows.Add(row);

122

123  row=dt.NewRow();

124  row["ID"]=6;

125  row["NickName"]="人物6";

126  row["QNumber"]="81461006";

127  dt.Rows.Add(row);

128

129  row=dt.NewRow();

130  row["ID"]=7;

131  row["NickName"]="人物7";

132  row["QNumber"]="375772376";

133  dt.Rows.Add(row);

134

135  row=dt.NewRow();

136  row["ID"]=8;

137  row["NickName"]="人物8";

138  row["QNumber"]="153534649";

139  dt.Rows.Add(row);

140

141  row=dt.NewRow();

142  row["ID"]=9;

143  row["NickName"]="人物9";

144  row["QNumber"]="619468";

145  dt.Rows.Add(row);

146

147  row=dt.NewRow();

148  row["ID"]=10;

149  row["NickName"]="人物10";

150  row["QNumber"]="83223563";

151  dt.Rows.Add(row);

152

153  Cache["Data"]=dt;

154  }

155  else

156    {

157  dt=Cache["Data"]asDataTable;

158  }

159  returndt;

160  }

161

162  实现ICallbackEventHandler成员RaiseCallbackEvent

176

177  protectedvoidList_ItemDataBound(objectsender,RepeaterItemEventArgse)

178  {

179  if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==

180

181  ListItemType.AlternatingItem)

182    {

客户端脚本简单实现Repeater的无刷新分页 repeater分页控件
183  LabelNickName=e.Item.FindControl("NickName")asLabel;

184  LabelQNumber=e.Item.FindControl("QNumber")asLabel;

185

186  DataRowrow=e.Item.DataItemasDataRow;

187  NickName.Text=row["NickName"].ToString();

188  QNumber.Text=row["QNumber"].ToString();

189  }

190  }

191

192  ///<summary>

193  ///获取指定控件重画的内容

194  ///</summary>

195  ///<paramname="control"></param>

196  ///<returns></returns>

197  privatestringRenderControl(Controlcontrol)

198  {

199  StringWriterwriter1=newStringWriter(CultureInfo.InvariantCulture);

200  HtmlTextWriterwriter2=newHtmlTextWriter(writer1);

201

202  control.RenderControl(writer2);

203360docimg_201_  writer2.Flush();

204360docimg_202_  writer2.Close();

205360docimg_203_

206360docimg_204_  returnwriter1.ToString();

207360docimg_205_  }

208360docimg_206_  }

正如代码所示,需要实现ICallbackEventHandler接口的两个方法,RaiseCallbackEvent用于接收到客户端传回来的参数,GetCallbackResult是在服务端做出合适的反应后将指定的结果发送回客户端,这里是把repeater重画的内容返回了,然后在客户端ReceiveCallback函数里进行无刷新的最后展现,最想说明的是,一定要注意CallServer(pageIndex,'content');ReceiveCallback(arg,context);这两个函数的使用技巧,CallServer是服务端生成的,它的第二个参数直接决定了在什么地方无刷新,ReceiveCallback和前者都是context参数,内容就是相同的,相当于传到服务器再原封不动的传回来,因此用于回发和接收时共享数据。

小示例可变换多种实现,希望大家都能找到适合自己简便实现的办法。

  

爱华网本文地址 » http://www.aihuau.com/a/25101011/87822.html

更多阅读

优酷客户端打不开该怎么办? 优酷客户端打不开

优酷客户端打不开该怎么办?——简介优酷网是中国领先的视频分享网站,优酷客户端也是大家常用的视频软件之一。但是有时候,会出现客户端打不开等问题,这次,小编就把自己的经验与大家分享一下,仅供参考。优酷客户端打不开该怎么办?——工具/

12306手机客户端 12306注册账号

12306手机客户端——简介12306网站是铁路官方的网络订票口,大家可以不用到车站直接在网上购买车票了,12306手机客户端则是该网站的手机客户端,昨天铁路官方宣布推出自己的12306手机客户端,这里小编就带着大家下载并安装12306手机客户端

简单CXF方式的webService客户端调用范例 cxf客户端动态调用

简单CXF方式的webService客户端调用范例文章分类:Java编程一般webServices发布后需要测试一下,是否可行通,在此我把自己所测试的 调用 webService 的简单范例贴出来供新手参考。如有不足,请多指教。1:需要借助的包: wss4j-1.5.4.jar cxf

VB Winsock控件的使用与介绍 vb常用控件介绍

第一节:Winsock控件的介绍Winsock控件的作用简单说就是可以用于两台或多台机器间通信,这里不多说这个控件的作用了,因为在以后的介绍中我们会了解到这个控件的强大功能的,如可以用来做聊天软件等……废话不多说,来看看他有些什么重要的属

声明:《客户端脚本简单实现Repeater的无刷新分页 repeater分页控件》为网友説爱忲楛分享!如侵犯到您的合法权益请联系我们删除