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做了一个定义.当然了,我在理解了回 ...
随机推荐
- 广州高清卫星地图 用百度卫星地图server下载 含标签、道路数据叠加 可商用
广州高清卫星地图的地图展示图片各自是15级别.17级别.19级别的地图.一般来说17级别的地图图片就行用于商用.地图包包括一整张高级别的图片,如要全图浏览请用专业图片处理软件PS等打开. 一般来说互联 ...
- UNIX网络编程学习笔记:值-结果(value-result)参数
前言 当把套接口地址结构传递给套接口函数时,总是通过指针来传递的,即传递的是一个指向结构的指针.结构的长度也作为参数来传递,其传递的方式取决于结构的传递方向:从进程到内核,还是从内核到进程. 1.从进 ...
- ip段/数字,如192.168.0.1/24的意思是什么?(转)
ip段/数字,如192.168.0.1/24的意思是什么? 踩踩 0作者:Admin 发表日期:2013-10-31 复制链接 收藏 首先来了解一下二进制的转换知识: 二进制数转换成十进制数 二进制的 ...
- panel,dialog,window组件越界(超出范围)问题汇总
参考地址 之前分别写过panel,dialog,window三个组件因为拖曳或者reSize造成组件越界而无法还原的问题,两篇文章分别针对拖曳和reSize给出了解决方案.不过根据朋友的反馈,reSi ...
- 心智图/思维导图(Mind Map/Mind Mapping),思维导图介绍
心智图(Mind Map),又称脑图.心智地图.脑力激荡图.思维导图.灵感触发图.概念地图.树状图.树枝图或思维地图,是一种图像式思维的工具以及一种利用图像式思考辅助工具来表达思维的工具. 心智图 ...
- java之final
我们先看一道面试题: 请问 final 的含义是什么?可以用在哪里?其初始化的方式有哪些? 首先我们回答一下这道题,然后再探究其所以然. 1.final 表示“最终的”.“不可改变的”,意指其修饰类 ...
- mosquitto --- 单向认证
1.生成证书要单向配置SSL 需要 做三项前置工作 1. 生成CA证书 2.生成server 端证书,server 端key github 的一个开源项目已经做到这点 ,详情可见 https://gi ...
- 温故而知新 forEach 无法中断(break)的问题
forEach无法使用break和return来中断,只能使用throw catch来达到中断的效果了. var id = (function(){ // forEach 是无法中断的.除非用这种ha ...
- unity, 两个动画同时播
法一,animationLayer. 处于不同animationLayer中的状态可以同时运行,即其中的动画可以同时播放. 所以通常一个角色至少需要用两个animationLayer,一个layer用 ...
- ubuntu内窗口最大最小化
我用的dell笔记本,开始的时候,需要修改dell笔记本的BIOS,里面有一个 Funtion Key 一开始定义的行为是多媒体的,需要改成默认行为,具体记不清了, 反正知道这个,肯定知道哪里找. 然 ...