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. 完成
原文地址:https://www.cnblogs.com/xiangniu/p/1981812.html