Asp.net回调技术Callback学习
.aspx:
- <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head runat="server">
- <title>无标题页</title>
- <script type="text/javascript">
- //向服务器传递参数
- function DoSearch(){
- var firstName=document.getElementById("TextBox1").value;
- CallServer(firstName,"");
- }
- //得到服务器的数据
- function ReceiveServerData(txtUserInfo){
- Results.innerHTML=txtUserInfo;
- }
- //设置每1秒执行一次
- setInterval("DoSearch()",1000);
- </script>
- </head>
- <body>
- <form id="form1" runat="server">
- <div>
- 姓名:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
- <br />
- <span id="Results" style=" width:500px;"></span>
- </div>
- </form>
- </body>
- </html>
.aspx.cs
- using System;
- using System.Collections;
- using System.Configuration;
- using System.Data;
- using System.Web;
- using System.Web.Security;
- using System.Web.UI;
- using System.Web.UI.HtmlControls;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.WebParts;
- using System.Data.SqlClient;
- public partial class _Default : System.Web.UI.Page, ICallbackEventHandler
- {
- protected string txtUserInfo;
- protected void Page_Load(object sender, EventArgs e)
- {
- //获取一个对客户端函数的引用
- string cbReference = Page.ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context");
- //动态注册回调函数
- string callbackScript = "function CallServer(arg,context)" + "{" + cbReference + "};";
- //引发callbackScript
- Page.ClientScript.RegisterStartupScript(this.GetType(), "CallServer", callbackScript, true);
- }
- //引发Callback事件处理
- public void RaiseCallbackEvent(string txtFirstName)
- {
- if (txtFirstName != null)
- {
- String connString = System.Configuration.ConfigurationManager.ConnectionStrings["sqlserver2008"].ToString();
- SqlConnection conn = new SqlConnection(connString);
- conn.Open();
- SqlCommand comm = new SqlCommand("select * from zzx where [name]=@name", conn);
- comm.Parameters.Add("@name", SqlDbType.VarChar).Value = txtFirstName;
- SqlDataReader reader = comm.ExecuteReader(CommandBehavior.CloseConnection);
- if (reader.Read())
- {
- txtUserInfo = "员工编号:" + reader["id"].ToString() + "<br>";
- txtUserInfo += "员工姓名:" + reader["name"].ToString() + "<br>";
- txtUserInfo += "地址:" + reader["address"].ToString() + "<br>";
- txtUserInfo += "服务器查询时间:" + DateTime.Now.ToString();
- }
- else
- {
- if (string.IsNullOrEmpty(txtFirstName))
- {
- txtUserInfo = "请输入姓名";
- }
- else
- {
- txtUserInfo = "查无此人";
- }
- }
- comm.Dispose();
- reader.Dispose();
- conn.Dispose();
- }
- }
- //得到回调的结果,返回给客户端
- public string GetCallbackResult()
- {
- return txtUserInfo;
- }
- }
简化版(偷懒一下):
- <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head runat="server">
- <title>无标题页</title>
- <script type="text/javascript">
- function OnCallBack(txtUserInfo,context){
- Results.innerHTML=txtUserInfo;
- }
- </script>
- </head>
- <body>
- <form id="form1" runat="server">
- <div>
- 姓名:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
- <input id="Button2" type="button" value="button"
- onclick="<%=Page.ClientScript.GetCallbackEventReference(this, "document.getElementById('TextBox1').value", "OnCallBack",null)%>" />
- <br />
- <span id="Results" style="pink; width: 500;"></span>
- </div>
- </form>
- </body>
- </html>
.aspx.cs
- using System;
- using System.Collections;
- using System.Configuration;
- using System.Data;
- using System.Web;
- using System.Web.Security;
- using System.Web.UI;
- using System.Web.UI.HtmlControls;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.WebParts;
- using System.Data.SqlClient;
- using System.Text;
- public partial class _Default : System.Web.UI.Page, ICallbackEventHandler
- {
- protected StringBuilder txtUserInfo;
- protected void Page_Load(object sender, EventArgs e)
- {
- }
- public string GetCallbackResult()
- {
- return txtUserInfo.ToString();
- }
- public void RaiseCallbackEvent(string txtFirstName)
- {
- txtUserInfo = new StringBuilder();
- String connString = ConfigurationManager.ConnectionStrings["sqlserver2008"].ToString();
- SqlConnection conn = new SqlConnection(connString);
- conn.Open();
- SqlCommand comm = new SqlCommand("select * from zzx where [name]=@name", conn);
- comm.Parameters.Add("@name", SqlDbType.VarChar).Value = txtFirstName;
- SqlDataReader reader = comm.ExecuteReader(CommandBehavior.CloseConnection);
- if (reader.Read())
- {
- txtUserInfo.Append("员工编号:" + reader["id"].ToString() + "<br>");
- txtUserInfo.Append("员工姓名:" + reader["name"].ToString() + "<br>");
- txtUserInfo.Append("地址:" + reader["address"].ToString() + "<br>");
- txtUserInfo.Append("查询时间:" + DateTime.Now.ToString());
- }
- else
- {
- if (txtFirstName == string.Empty)
- {
- txtUserInfo.Append("请输入姓名");
- }
- else
- {
- txtUserInfo.Append("查无此人");
- }
- reader.Dispose();
- comm.Dispose();
- conn.Dispose();
- }
- }
- }
示例3:
- <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head runat="server">
- <title>无标题页</title>
- <script type="text/javascript">
- //客户端执行的方法
- //下面的方法是接收并处理服务器方法返回的结果
- function Success(args,context){
- message.innerHTML=args;
- }
- //下面的方式是当接收服务器方法处理的结果发生异常时调用的方法
- function Error(){
- message.innerHTML="发生了异常!";
- }
- </script>
- </head>
- <body>
- <form id="form1" runat="server">
- <div>
- 用户名:<input type="text" id="txtUserName" onblur="CallServerMethod(txtUserName.value,null)" />
- <span id="message"></span>
- <br />
- 密码:<input type="password" size="10" maxlength="20" id="txtPwd" />
- </div>
- </form>
- </body>
- </html>
- public partial class Default3 : System.Web.UI.Page,ICallbackEventHandler //实现ICallbackEventHandler接口
- {
- String result = String.Empty;
- protected void Page_Load(object sender, EventArgs e)
- {
- //获取当前页的ClientScriptManager的引用
- ClientScriptManager csm = Page.ClientScript;
- /*获取回调的引用.会在客户端生成WebForm_DoCallback方法,
- * 调用它来达到异步调用.这个方法是微软写的方法,会被发送
- 到客户端*/
- /*注意这里的"Success"和Error两个字符串分别是客户端代码中
- *定义的两个javascript函数*/
- //下面的方法最后一个参数的意义:true表示执行异步回调,false标志执行同步回调
- String reference = csm.GetCallbackEventReference(this, "args", "Success", "", "Error", true);
- String callbackScript = "function CallServerMethod(args,context){\n"+
- reference+";\n }";
- //向当前页面注册javascript脚本代码
- csm.RegisterClientScriptBlock(this.GetType(), "CallServerMethod",callbackScript,true);
- }
- #region ICallbackEventHandler 成员
- /// <summary>
- /// 返回回调方法执行结果的方法
- /// </summary>
- public string GetCallbackResult()
- {
- return result;
- }
- /// <summary>
- /// 在服务器端运行回调方法
- /// </summary>
- public void RaiseCallbackEvent(string eventArgument)
- {
- if (eventArgument.ToLower().IndexOf("admin")!=-1)
- {
- result =eventArgument+ "不能作为用户注册.";
- }
- else
- {
- result = eventArgument + "可以注册.";
- }
- }
- #endregion
- }
Asp.net回调技术Callback学习的更多相关文章
- ASP.NET 回调技术(CallBack)
在asp.net中客户端与服务器端的交互默认都是整页面提交, 此时客户端将当前页面表单中的数据(包括一些自动生成的隐藏域)都提交到服务器端,服务器重新实例化一个当前页面类的实例响应这个请求,然后将整个 ...
- 【ASP.NET 基础】Page类和回调技术
Page 类有一个 IsPostBack 属性,这个属性用来指示当前页面是第一次加载还是响应了页面上某个控件的服务器事件导致回发而加载. 1.asp.net页面的声明周期 asp.net页面运行的时候 ...
- ASP.NET探讨:技术的学习顺序问题
作者: シtearシ 来源: 博客园 发布时间: 2011-09-27 08:40 阅读: 7675 次 推荐: 25 原文链接 [收藏] 摘要:很多人对于ASP.NET的入门和学 ...
- (转)探讨:ASP.NET技术的学习顺序问题
探讨:ASP.NET技术的学习顺序问题 摘要:很多人对于ASP.NET的入门和学习顺序比较迷茫,今天让我们一起来跟随作者的思路学习探讨ASP.NET的学习顺序问题,希望有所帮助. 如果你已经有较多的面 ...
- 【转】探讨:ASP.NET技术的学习顺序问题
摘要:很多人对于ASP.NET的入门和学习顺序比较迷茫,今天让我们一起来跟随作者的思路学习探讨ASP.NET的学习顺序问题,希望有所帮助. 如果你已经有较多的面向对象开发经验,跳过以下这两步: 第一步 ...
- 路由其实也可以很简单-------Asp.net WebAPI学习笔记(一) ASP.NET WebApi技术从入门到实战演练 C#面向服务WebService从入门到精通 DataTable与List<T>相互转换
路由其实也可以很简单-------Asp.net WebAPI学习笔记(一) MVC也好,WebAPI也好,据我所知,有部分人是因为复杂的路由,而不想去学的.曾经见过一位程序猿,在他MVC程序中, ...
- JavaScript学习笔记(十二) 回调模式(Callback Pattern)
函数就是对象,所以他们可以作为一个参数传递给其它函数: 当你将introduceBugs()作为一个参数传递给writeCode(),然后在某个时间点,writeCode()有可能执行(调用)intr ...
- 理解javascript中的回调函数(callback)【转】
在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...
- JAVA回调机制(CallBack)详解
序言 最近学习java,接触到了回调机制(CallBack).初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义.当然了,我在理解了回 ...
随机推荐
- Oracle DB 数据库维护
• 管理优化程序统计信息 • 管理自动工作量资料档案库(AWR) • 使用自动数据库诊断监视器(ADDM) • 说明和使用指导框架 • 设置预警阈值 • 使用服务器生成的预警 • 使用自动任务 数 ...
- java 泛型--桥方法
因为 java 在编译源码时, 会进行 类型擦除, 导致泛型类型被替换限定类型(无限定类型就使用 Object). 因此为保持继承和重载的多态特性, 编译器会生成 桥方法. 本文最后附录所有源码. P ...
- myDate97用法
myDate97用法 CreateTime--2017年5月12日11:00:32Author:Marydon 一.基本用法 官网链接:http://www.my97.net/index.asp ...
- java线程同步: synchronized详解(转)
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchronized(this ...
- phpredis中文手册——《redis中文手册》 php版(转)
redis中文手册:http://readthedocs.org/docs/redis/en/latest/ 本文是参考<redis中文手册>,将示例代码用php来实现,注意php-red ...
- 转: Linux网络编程 【8】五种I/O 模式
五种I/O 模式:[1] 阻塞 I/O (Linux下的I/O操作默认是阻塞I/O,即open和socket创建的I/O都是阻塞I/O)[2] 非阻塞 ...
- C#DirectX播放视频
文章地址:http://www.cnblogs.com/zhangjun1130/archive/2009/09/15/1566814.html 很多人第一次接触到DirectX大都是通过游戏,至于安 ...
- Linux下 sleep函数的注意事项
1. 休眠sleep(unsigned int)为线程内操作 所以如果不同线程,信号量SIGALRM是不能中断sleep(): 编写程序进行测试 //timercreate_demo.cpp #i ...
- js方式实现页面加遮罩效果
有时候在页面上执行查询的时候由于数据量很大,需要较长时间,所以就需要在等待结果期间不可以操作页面,那么可以使用如下代码给页面添加遮罩效果: $.messager.progress({ title: ' ...
- int、char、long各占多少字节数
Java基本类型占用的字节数:1字节: byte , boolean2字节: short , char4字节: int , float8字节: long , double 编码与中文:Unicode/ ...