Asp.Netコールバック技術Callback学習ノート

6830 ワード

.aspx:

 

 
 
 
     

 

//         
function DoSearch(){ 
var firstName=document.getElementById("TextBox1").value; 
CallServer(firstName,""); 
} 

//         
function ReceiveServerData(txtUserInfo){ 
Results.innerHTML=txtUserInfo; 
} 

//   1      
setInterval("DoSearch()",1000); 
 

 
 

名前:
[/code]
.aspx.cs
[code]
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() + "";
txtUserInfo+="従業員名:"+reader["name"].ToString() + "";
txtUserInfo+="アドレス:"+reader["address].ToString() + "";
txtUserInfo+="サーバクエリ時間:"+DateTime.Now.ToString();
}
else
{
if (string.IsNullOrEmpty(txtFirstName))
{
txtUserInfo=「名前を入力してください」
}
else
{
txtUserInfo="この人がいないことを調べる";
}
}
comm.Dispose();
reader.Dispose();
conn.Dispose();
}
}
//コールバックの結果、クライアントへ戻る
public string GetCallbackResult()
{
return txtUserInfo;
}
}
簡略版(サボる):

 

 
 
 
     

 
function OnCallBack(txtUserInfo,context){ 
Results.innerHTML=txtUserInfo; 
} 
 

 
 

名前:
"/>
.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()+「」);
txtUserInfo.Append("従業員名:"+reader["name"].ToString()+");
txtUserInfo.Append("アドレス:"+reader["address"].ToString()+");
txtUserInfo.Append(「クエリー時間:」+DateTime.Now.ToString();
}
else
{
if (txtFirstName == string.Empty)
{
txtUserInfo.Append(「名前を入力してください」);
}
else
{
txtUserInfo.Append(「この人がいないことを調べる」);
}
reader.Dispose();
comm.Dispose();
conn.Dispose();
}
}
}
例3:

 

 

 
 
     
 
//         
//                      
function Success(args,context){ 
message.innerHTML=args; 
} 

//                              
function Error(){ 
message.innerHTML="     !"; 
} 
 
 
 

ユーザー名:
パスワード:
[code]
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の2つの文字列はそれぞれクライアントコードにあることに注意してください.
*定義された2つのjavascript関数*/
//次の方法の最後のパラメータの意味:trueは非同期コールバックを実行し、falseフラグは同期コールバックを実行する
String reference = csm.GetCallbackEventReference(this, "args", "Success", "", "Error", true);
String callbackScript = "function CallServerMethod(args,context){"+
reference+"; }";
//javascriptスクリプトコードを現在のページに登録する
csm.RegisterClientScriptBlock(this.GetType(), "CallServerMethod",callbackScript,true);
}
#region ICallbackEventHandlerメンバー
///
//コールバックメソッド実行結果を返す方法
///
public string GetCallbackResult()
{
return result;
}
///
//サーバ側でコールバックメソッドを実行する
///
public void RaiseCallbackEvent(string eventArgument)
{
if (eventArgument.ToLower().IndexOf("admin")!=-1)
{
result=eventArgument+「ユーザーとして登録できません.」;
}
else
{
result=eventArgument+「登録可能.」;
}
}
#endregion
}