`

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="background-color:Pink; 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="background-color: 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编程知识】Asp.net回调技术Callback学习笔记.docx

    【ASP.NET编程知识】Asp.net回调技术Callback学习笔记.docx

    Asp.net回调技术Callback学习笔记

    主要记录了Asp.net回调技术Callback的一些知识,感兴趣的朋友可以参考下

    ASP.NET2.0实现无刷新客户端回调的Callback机制

    ASP.NET2.0实现无刷新客户端回调的Callback机制

    ASP.NET回调函数

    实现ASP.NET的无刷新

    asp.net:Page类和回调技术

    在今天我主要要介绍的有如下知识点: Page类介绍、 Page的生命周期、 IsPostBack属性、 ClientScriptManager类、 回调技术(CallBack)

    asp.net知识库

    Asp.Net2.0无刷新客户端回调 体验.net 2.0 的优雅(1) -- 异步WebService调用 ASP.NET 2.0页面框架的几点新功能 ASP.NET 2.0 中收集的小功能点 asp.net2.0中的webpart使用小记 2.0问题、错误解决办法 ASP.NET 2.0...

    Jcrop_swfupload_asp.net实例

    支持改变选区或移 动选区时的回调(Callback) 支持用键盘微调选 区 通过API创建互 动,比如动画效果 支持CSS样式 SWFUpload是一个客户端文件上传工具,最初由Vinterwebb.s e开发,它通过整合Flash与JavaScript...

    漂亮的ComponentArtWebUI web界面

    CallBack (回调) Menu (菜单) SiteMap (地图) ToolBar (工具条) ComboBox (组合框) MultiPage (分页) Snap (抓取) TreeView (树形列表) Dialog (对话框) NavBar (导航条) Splitter (框架分离) WebChart Lite ...

    ComponentArtWebUI商业源码

    CallBack (回调) Menu (菜单) SiteMap (地图) ToolBar (工具条) ComboBox (组合框) MultiPage (分页) Snap (抓取) TreeView (树形列表) Dialog (对话框) NavBar (导航条) Splitter (框架分离) WebChart Lite ...

    漂亮的ComponentArtWebUI及Demo源码(商业版带安装序列号)part2

    ComponentArt Web.UI 包含以下用户界面控件 &lt;br&gt; Calendar (日历) Grid (表格) Rotator (旋转器) TabStrip (标签) CallBack (回调) Menu (菜单) SiteMap (地图) ToolBar (工具条) ComboBox ...

    漂亮的ComponentArtWebUI及Demo源码(商业版带安装序列号)part1

    ComponentArt Web.UI 包含以下用户界面控件 &lt;br&gt; Calendar (日历) Grid (表格) Rotator (旋转器) TabStrip (标签) CallBack (回调) Menu (菜单) SiteMap (地图) ToolBar (工具条) ComboBox ...

    GOODTEXT.ORG留言本 v2.3

    qqappid = "你自己的appid" '填写申请接入【QQ登录】时获得的appidqqcallback = "回调地址,例如//你的网址/qc_callback.html" '填写【QQ登录】回调地址需要注意:无刷新评论设置时要正确设置调用文件路径,相对路径...

    Flash头像上传剪裁预览组件 v2.0.rar

    1.多增加js 回调函数参数 picUrl,callbackdata picUrl:后端图片路径 callbackdata:后端返回数据 2.新增加后端 保留图片路径 savePath (默认当前路径) 3.新增加后端 保存图片名称 savePicName(默认是时间戳) ...

    ASP.NET实现QQ、微信、新浪微博OAuth2.0授权登录 原创

    不管是腾讯还是新浪,查看他们的API,PHP都是有完整的接口,但对C#支持似乎...我这个写法的特点是,用到了Session,使用对象实例化之后调用 Login() 跳转到登录页面,在回调页面调用Callback() 执行之后,可以从Session

    GOODTEXT.ORG留言本 v2.3.rar

    qqcallback = "回调地址,例如:http://你的网址/qc_callback.html" '填写【QQ登录】回调地址 需要注意:无刷新评论设置时要正确设置调用文件路径,相对路径或者绝对路径,只要正确即可。 GOODTEXT.ORG留言本 引用...

    GOODTEXT.ORG留言本v2.3

    GOODTEXT.ORG之前推出过使用【QQ登录】方式留言的asp.net版留言本,不过有些朋友反映自己没有支持asp.net网络环境, 所以这次降低要求制作了asp版的,主要是改造了以前制作的GOODTEXT.ORG留言本 v1.4版,虽然结构...

    GOODTEXT.ORG留言本 2.3.rar

    GOODTEXT.ORG之前推出过使用【QQ登录】方式留言的asp.net版留言本,不过有些朋友反映自己没有支持asp.net网络环境, 所以这次降低要求制作了asp版的,主要是改造了以前制作的GOODTEXT.ORG留言本 v1.4版,虽然结构...

    Web应用程序的ClientCallback自定义控件

    客户端回调自定义控件以及如何在WebForms中使用它。

Global site tag (gtag.js) - Google Analytics