• asp.net中使用callback


    使用回调的步骤如下:

    1. 在控件或者page类中实现 ICallbackEventHandler 接口,分别是 RaiseCallbackEvent() 和 GetCallbackResult() 。RaiseCallbackEvent()是回调执行的方法,该方法处理回调的内容。他没有返回值,而是从浏览器接受一个字符串作为事件的参数,即接受客户端 javaScript 传递的参数。它是首先触发的,接下来触发的就是 GetCallbackResult() ,他将得到的结果返回给客户端的脚本。
    2. 生成调用该回调的客户端脚本。可通过 ClientScriptManager 类得 GetCallbackEventReference() 生成。 Page类得 ClientScript 属性就是一个 ClientScriptManager 类得实例。
    3. 编写代码调用在第二步中生成的客户端脚本。

      下面是两个例子: 

    ①由用户触发

      在页面中添加

    <body>
    <form id="a1" runat=server>
    <div>
    <input id="txtUserName" type="text" />
    <input id="btnCallBack" type="button" value="callBack" onclick="<%= ClientScript.GetCallbackEventReference(this,"document.getElementById('txtUserName').value","onCallBack",null) %>" />
    </div>
    </form>
    <p id="result">
    </p>
    <div>
    <input id="btnJTest" type="button" value="button" />
    </div>
    </body>
    1. 在button的 onclick 中写入:
      onclick="<%= ClientScript.GetCallbackEventReference(this,"document.getElementById('txtUserName').value","onCallBack",null) %>" 
    2. 在javascript中编写相应的函数
      function onCallBackNoBtn()
      {
      callServer(document.getElementById(
      'txtUserName').value,"");
      }
    3. 在 xxx.aspx.cs 中继承 ICallbackEventHandler  并实现其方法。
      public partial class webPage_callBackBtn : System.Web.UI.Page, ICallbackEventHandler
      {
      protected string strUserInfo; //callback最终得到的信息
      protected void Page_Load(object sender, EventArgs e)
      {
      }

      #region ICallbackEventHandler 成员

      public string GetCallbackResult()
      {
      return strUserInfo;
      }

      public void RaiseCallbackEvent(string eventArgument) //服务端的处理函数
      {
      if (eventArgument == "") return;
      System.Data.SqlClient.SqlConnection conn
      = new System.Data.SqlClient.SqlConnection();
      conn.ConnectionString
      = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["nowthWindConnectionString"].ConnectionString;

      SqlCommand cmd
      = new SqlCommand();
      cmd.CommandType
      = CommandType.Text;
      cmd.Parameters.Add(
      "@FirstName", SqlDbType.NVarChar, 10)
      .Value
      = eventArgument;
      cmd.CommandText
      = "SELECT EmployeeID, LastName FROM Employees WHERE FirstName=@FirstName";
      cmd.Connection
      = conn;

      SqlDataReader reader;
      ConnectionState previousConnectionState
      = conn.State;

      try
      {
      if (conn.State == ConnectionState.Closed)
      {
      conn.Open();
      }

      reader
      = cmd.ExecuteReader();

      using (reader)
      {
      while (reader.Read())
      {
      // Process SprocResults datareader here.
      strUserInfo += reader[0];
      }
      }
      strUserInfo
      += "###";
      }
      finally
      {
      if (previousConnectionState == ConnectionState.Closed)
      {
      conn.Close();
      }
      }
      }

      #endregion
      }

      RaiseCallbackEvent() 负责接收 client 端的javascript 所传送过来的参数,以此参数查询数据库中的数据,最后由 GetCallbackResult() 将结果传回 client端的javascript,最后将结果显示出来。
    4. 完成  O(∩_∩)O~ 现在在 textbox 中输入 Nancy 则会显示 1### 。如果输入的名字在数据库中没有则不显示,(我的只是完成了《圣殿祭司的asp.net》中的这一节的一部分)

    ②自动触发。

    1. 如上 3. 在 xxx.aspx.cs 中继承 ICallbackEventHandler  并实现其方法。
    2. 在 javascript中添加
      <script type="text/javascript">
      function doSearch(){
      var txtFirstName= document.getElementById("txtUserName");
      callServer(txtFirstName.value,
      "");
      }

      function receiveServerData(txtUserInfo)
      {
      Results.innerText
      =txtUserInfo;
      }

      var int=self.setInterval('doSearch()',5000);
      </script>
    3. 在 aspx.cs 中动态注册 javascript
      protected void Page_Load(object sender, EventArgs e)
      {
      string cbReference = Page.ClientScript.GetCallbackEventReference(this,"arg", "receiveServerData", null);
      //Page.ClientScript.GetCallbackEventReference(this,"arg", "receiveServerData", null);
      string callBackScript;
      callBackScript
      = "function callServer(arg,context){" + cbReference + "};";
      //string callBackScript = "function callServer(arg,context){WebForm_DoCallback('__Page',arg,receiveServerData,null,null,false)};";
      Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "CallServer123", callBackScript, true);
      }
    4. 完成
  • 相关阅读:
    CMDB运维开发项目
    Twisted使用和scrapy源码剖析
    scrapy爬虫框架
    rabbitmq:centos7安装与python调用
    github创建远程仓库
    git使用
    Python模块:paramiko
    centos7安装python3和Django后,ModuleNotFoundError: No module named '_sqlite3'
    21. java面向对象
    20. java面向对象
  • 原文地址:https://www.cnblogs.com/xiangniu/p/1981812.html
Copyright © 2020-2023  润新知