客户端脚本简单实现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> ",
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 {
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参数,内容就是相同的,相当于传到服务器再原封不动的传回来,因此用于回发和接收时共享数据。
小示例可变换多种实现,希望大家都能找到适合自己简便实现的办法。
更多阅读
优酷客户端打不开该怎么办? 优酷客户端打不开
优酷客户端打不开该怎么办?——简介优酷网是中国领先的视频分享网站,优酷客户端也是大家常用的视频软件之一。但是有时候,会出现客户端打不开等问题,这次,小编就把自己的经验与大家分享一下,仅供参考。优酷客户端打不开该怎么办?——工具/
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控件的作用简单说就是可以用于两台或多台机器间通信,这里不多说这个控件的作用了,因为在以后的介绍中我们会了解到这个控件的强大功能的,如可以用来做聊天软件等……废话不多说,来看看他有些什么重要的属
如何发现花生壳客户端IP和真实的有线通外网地址不一致呢? 花生壳客户端下载
问哈首页?花生壳?动态域名已解决提问者:安拉哔咖- 入伍 无如何发现花生壳客户端IP和真实的有线通外网地址不一致呢?解决时间:2011-01-15 18:4