读取数据库信息的客户端回调程序
本程序是一个实现读取northwind数据库的emlpoyees信息,为此你必须先保证northwind数据库存在。下图是emlpoyees表的内容。
在文本框输入要查找的用户名后,接着点击"回调"按钮就会发生客户端回调。这是查找到用户的显示结果
用户不存在的显示信息:
后台代码:clientcallbackssimple.aspx.cs
01 using system;
02 using system.data;
03 using system.configuration;
04 using system.collections;
05 using system.web;
06 using system.web.security;
07 using system.web.ui;
08 using system.web.ui.webcontrols;
09 using system.web.ui.webcontrols.webparts;
10 using system.web.ui.htmlcontrols;
11 using system.data.sqlclient;
12 public partial class clientcallbackssimple : system.web.ui.page, 13
13 system.web.ui.icallbackeventhandler
14 {
15 protected string struserinfo; //保存读取的用户信息
16 //引发回调事件
17 public void raisecallbackevent(string txtfirstname)
18 {
19 if (txtfirstname != null)
20 {
21 sqlconnection conn = new sqlconnection("data source=localhost;initial
22 catalog=northwind;integrated security=sspi");
23 conn.open();
24 sqlcommand cmd = new sqlcommand("select employeeid,firstname,city,address 25
25 from employees where firstname=@firstname", conn);
26 cmd.parameters.add("@firstname", sqldbtype.nvarchar, 10).value = txtfirstname;
27 sqldatareader dr = cmd.executereader();
28 if (dr.read())
29 {
30 struserinfo = "员工代号:" + dr["employeeid"] + "\r\n";
31 struserinfo += "姓名:" + dr["firstname"] + "\r\n";
32 struserinfo += "居住城市:" + dr["city"] + "\r\n";
33 struserinfo += "地址:" + dr["address"].tostring().replace("\r\n","")+ "\r\n";
34 struserinfo += "服务器查询时间:" + datetime.now.tolongtimestring();
35 }
36 else
37 {
38 if (string.isnullorempty(txtfirstname))
39 {
40 struserinfo = "请输入姓名";
41 }
42 else
43 {
44 struserinfo = "查无此人";
45 }
46 }
47 cmd.dispose();
48 dr.dispose();
49 conn.dispose();
50 }
51 }
52 //回传回调结果
53 public string getcallbackresult()
54 {
55 return struserinfo; //回传员工的基本信息
56 }
57 }
代码说明:在raisecallbackevent()方法中,传递了一个从前台页面文本框的输入数据作为其参数,即所要从数据库查询的用户名。第28-34行代码的功能为读取用户的详细信息,并且将用户信息保存在一个字符串struserinfo中。如果查找不到相应的用户,则返回一些出错信息,见代码36-45。getcallbackresult()方法回发回调结果,即保存用户信息的字符串。
前台代码:clientcallbackssimple.aspx
01 <%@ page language="c#" autoeventwireup="true" codefile="clientcallbackssimple.aspx.cs"
02 inherits="clientcallbackssimple" %>
03 <html xmlns="http://www.w3.org/1999/xhtml" >
04 <head runat="server">
05 <title>读取数据库信息的客户端回调程序</title>
06 <script type="text/javascript">
07 function oncallback(struserinfo,context)
08 {
09 results.innertext = struserinfo;
10 }
11 </script>
12 </head>
13 <body>
14 <form id="form1" runat="server">
15 <div>
16 姓名:<input id="txtusername" type="text" />
17 <input id="btncallback" type="button" value="回调" onclick="<%=
18 clientscript.getcallbackeventreference(this,"document.form1.txtusername.value",
19 "oncallback",null) %>" />
20 <br />
21 <div id="results" style="background-color: pink"></div>
22 </div>
23 </form>
24 </body>
25 </html>
代码说明:这个程序与第一个程序的最大不同就是前台页面上有些细微的区别。如代码17-19所示,我们将发送回调的clientscript.getcallbackeventreference()方法直接写在了按钮的单击事件中,这也是一种可行且简捷的方式。clientscript.getcallbackeventreference()方法的3个参数为"oncallback",表示回调完成后将回调结果返回给客户端的oncallback()脚本函数,在此回调结果struserinfo将作为该函数的一个参数在页面进行显示,如代码9所示。由于我们在此没有用到上下文的联系,所以clientscript.getcallbackeventreference()方法的4个参数为"null",但是oncallback()脚本函数还是要保留该"context"参数,因为这是接受回调结果的客户端函数的固定格式。
小结:
注意所有的异步技术如本文所探讨的callback客户端回调,以及微软新推出的atlas框架,都不再使用传统的postback。因此客户端在呈现由服务器端返回的数据时,浏览器下方将看不到一闪而过的绿色状态条,并且异步过程只传送和接受少量的数据,而非postback过程中传递的整个viewstate状态,因此程序在执行性能上有了较大的提高。希望读者耐心理解和练习上述的两个实例,只有通过自己的实践才能理解客户端回调的精髓。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器