客戶端回調程序

讀取數據庫信息的客戶端回調程序

  本程序是一個實現讀取Northwind數據庫的Emlpoyees信息,爲此你必須先保證Northwind數據庫存在。下圖是Emlpoyees表的內容。

在文本框輸入要查找的用戶名後,接着點擊"回調"按鈕就會發生客戶端回調。這是查找到用戶的顯示結果


用戶不存在的顯示信息:

後臺代碼:ClientCallbacksSimple.aspx.cs

01 using System;
02 using System.Data;
03 using System.Configuration;
04 using System.Collections;
05 using System.Web;
06 using System.Web.Security;
07 using System.Web.UI;
08 using System.Web.UI.WebControls;
09 using System.Web.UI.WebControls.WebParts;
10 using System.Web.UI.HtmlControls;
11 using System.Data.SqlClient;

12 public partial class ClientCallbacksSimple : System.Web.UI.Page, 13
13 System.Web.UI.ICallbackEventHandler
14 {
15  protected string strUserInfo; //保存讀取的用戶信息
16  //引發回調事件
17  public void RaiseCallbackEvent(string txtFirstName)
18  {
19   if (txtFirstName != null)
20   {
21    SqlConnection conn = new SqlConnection("data source=localhost;initial
22    catalog=Northwind;integrated security=SSPI");
23    conn.Open();

24    SqlCommand cmd = new SqlCommand("select EmployeeID,FirstName,City,Address 25
25    from Employees where FirstName=@FirstName", conn);
26    cmd.Parameters.Add("@FirstName", SqlDbType.NVarChar, 10).Value = txtFirstName;
27    SqlDataReader dr = cmd.ExecuteReader();

28    if (dr.Read())
29    {
30     strUserInfo = "員工代號:" + dr["EmployeeID"] + "/r/n";
31     strUserInfo += "姓名:" + dr["FirstName"] + "/r/n";
32     strUserInfo += "居住城市:" + dr["City"] + "/r/n";
33     strUserInfo += "地址:" + dr["Address"].ToString().Replace("/r/n","")+ "/r/n";
34     strUserInfo += "服務器查詢時間:" + DateTime.Now.ToLongTimeString();
35    }
36    else
37    {
38     if (String.IsNullOrEmpty(txtFirstName))
39     {
40      strUserInfo = "請輸入姓名";
41     }
42     else
43     {
44      strUserInfo = "查無此人";
45     }
46    }

47    cmd.Dispose();
48    dr.Dispose();
49    conn.Dispose();
50   }
51  }

52  //回傳回調結果
53  public string GetCallbackResult()
54  {
55   return strUserInfo; //回傳員工的基本信息
56  }
57 }


  代碼說明:在RaiseCallbackEvent()方法中,傳遞了一個從前臺頁面文本框的輸入數據作爲其參數,即所要從數據庫查詢的用戶名。第28-34行代碼的功能爲讀取用戶的詳細信息,並且將用戶信息保存在一個字符串strUserInfo中。如果查找不到相應的用戶,則返回一些出錯信息,見代碼36-45。GetCallbackResult()方法回發回調結果,即保存用戶信息的字符串。

  前臺代碼:ClientCallbacksSimple.aspx

01 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ClientCallbacksSimple.aspx.cs"
02 Inherits="ClientCallbacksSimple" %>
03 <html xmlns="http://www.w3.org/1999/xhtml" >
04 <head runat="server">
05 <title>讀取數據庫信息的客戶端回調程序</title>
06 <script type="text/JavaScript">
07  function OnCallback(strUserInfo,context)
08  {
09   Results.innerText = strUserInfo;
10  }
11 </script>
12 </head>
13 <body>
14  <form id="form1" runat="server">
15  <div>
16   姓名:<input id="txtUserName" type="text" />
17   <input id="btnCallback" type="button" value="回調" οnclick="<%=
18   ClientScript.GetCallbackEventReference(this,"document.form1.txtUserName.value",
19 "OnCallback",null) %>" />
20   <br />
21   <div ID="Results" style="background-color: pink"></div>
22  </div>
23 </form>
24 </body>
25 </html>


  代碼說明:這個程序與第一個程序的最大不同就是前臺頁面上有些細微的區別。如代碼17-19所示,我們將發送回調的ClientScript.GetCallbackEventReference()方法直接寫在了按鈕的單擊事件中,這也是一種可行且簡捷的方式。ClientScript.GetCallbackEventReference()方法的3個參數爲"OnCallback",表示回調完成後將回調結果返回給客戶端的OnCallback()腳本函數,在此回調結果strUserInfo將作爲該函數的一個參數在頁面進行顯示,如代碼9所示。由於我們在此沒有用到上下文的聯繫,所以ClientScript.GetCallbackEventReference()方法的4個參數爲"null",但是OnCallback()腳本函數還是要保留該"context"參數,因爲這是接受回調結果的客戶端函數的固定格式。

  小結:

  注意所有的異步技術如本文所探討的Callback客戶端回調,以及微軟新推出的Atlas框架,都不再使用傳統的Postback。因此客戶端在呈現由服務器端返回的數據時,瀏覽器下方將看不到一閃而過的綠色狀態條,並且異步過程只傳送和接受少量的數據,而非Postback過程中傳遞的整個ViewState狀態,因此程序在執行性能上有了較大的提高。希望讀者耐心理解和練習上述的兩個實例,只有通過自己的實踐才能理解客戶端回調的精髓。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章