Asp.Net2.0 のクライアント コールバックは、ページ全体を送信せずに、サーバーに送信するデータを制御できると同時に、サーバーはデータを送り返さずに、必要なデータのみを返します。 . ページ全体。
まず、非常に重要なメソッドについて話さなければなりません。私の理解が間違っている可能性がありますので、ご指摘ください。
GetCallbackEventReference は、まず、クライアント スクリプトがサーバーにパラメーターを渡すことを可能にする RaiseCallbackEvent メソッドを実装し、次に、RaiseCallBackEvent メソッドの値を、GetCallbackEventRefernce メソッドに登録したパラメーターに返します (実際には、これもクライアント上で記述したいスクリプトです) )。 GetCallbackEventRefernce を呼び出すには、クライアント スクリプトから 2 つのパラメーターを渡す必要があります。1 つは RaiseCallbackEvent イベントに渡される値で、もう 1 つはコンテキストです。
そのパラメーターの意味は次のとおりです。
1 つ目: 対象となるページまたはサーバー コントロール。 ICallbackEventHandler インターフェイスを実装します。前のページを表すためにこれを記述します。
2 番目: クライアントからサーバーの RaiseCallbackEvent メソッドに渡す値を表します。
3 番目: クライアントで作成する JS 関数も同時に、サーバーは計算されたデータをこの関数に渡します。この関数のパラメータ。
4 番目: コンテキストが何を意味するのか正確にはわかりません。GetCallbackEventRefernce がクライアントに送信するコードは次のとおりです:
WebForm_DoCallback('__Page',arg,ReceiveServerData,context,null,false)
では、リクエストを取得するにはどうすればよいですか。クライアントはどうやって彼に電話しますか? 3 つのメソッドを見ました。
1 つ目: バックグラウンドでパブリック文字列を書き込み、Page_Load に割り当てます。 =Page.ClientScript.GetCallbackEventReference(this, "message", "ShowServerTime", "context"); ここに注意してください。これは Page です。 .ClientScrip。すべてのクライアント スクリプトを管理する ClientScriptManager を返すためです。次に、フォアグラウンドのボタンの onclick イベントで、次のように小さな実験用コードを作成します。
フロントエンド ServerTime.aspx: 便宜上、多くの無駄な HTML
<%@ page language="
を削除します。C#" CodeFile="ServerTime.aspx.cs" Inherits="ServerTime_aspx" %>
<html>
<頭>
<title>サーバー時間</title>
<script language="javascript">
関数 GetServerTime()
{
var メッセージ = '';
var context = '';
<%=sCallBackFunctionInvocation%>
関数 ShowServerTime(timeMessage, context)
{
alert('サーバーの現在時刻は次のとおりです:n' + timeMessage);
}
</スクリプト>
</頭>
<本文>
<form id="MainForm" runat="server">
<input type="button" value="サーバー時刻を取得" onclick="GetServerTime();" />
</フォーム>
</本文>
</html>
バックエンド:
システムを使用します。
System.Web.UI を使用する;
パブリック部分クラス ServerTime_aspx : Page,ICallbackEventHandler
{
//必ず ICallbackEventHandler を実装してください public string sCallBackFunctionInvocation
void Page_Load(object sender, System.EventArgs e);
{
sCallBackFunctionInvocation = Page.ClientScript.GetCallbackEventReference(this, "メッセージ", "ShowServerTime", "コンテキスト");
パブリック
文字列RaiseCallbackEvent(stringeventArgument)
{
DateTime.Now.ToString() を返します。
}
実行
してボタンをクリックすると、結果は次のようになります。
2 番目の方法: 上記の方法では、背景を前景にバインドする必要がありますが、バインドしない場合はどうなるでしょうか?
GetCallbackEventReference を js 関数の実装内容として直接使用し
、この js 関数をクライアントに登録します。
フロントエンド TestPage コード:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestPage.aspx.cs" Inherits="TestPage" %>
<html>
<頭>
<title>無題ページ</title>
<script type="text/javascript">
関数テスト()
{
var lb = document.getElementById("Select1");
//取得されるドロップダウン ボックス var con = lb.options[lb.selectedIndex].text;
//選択したドロップダウン ボックスのテキストを取得し、サーバーによって出力される js 関数である CallTheServer を呼び出します。 CallTheServer(con,'');
}
functionReceiveServerData(rValue)
{
Results.innerHTML = rValue;
}
</スクリプト>
</頭>
<本文>
<form id="form1" runat="server">
<div>
<select id="選択1">
<option value=1 selected="選択">マウスの弟子</option>
<option value=2>呉奇娥先生</option>
</選択>
<br />
<br />
<input onclick="test()" value="サーバーからドロップダウンボックスのテキストを返す" type=button>
<br />
<br />
<スパンID="結果"></スパン>
<br />
</div>
</フォーム>
</本文>
</html>
バックエンド コード:
System を使用します。
System.Data を使用します。
System.Configuration を使用します。
System.Collections を使用します。
System.Web を使用します。
System.Web.Security を使用します。
System.Web.UI を使用します。
System.Web.UI.WebControls を使用します。
System.Web.UI.WebControls.WebParts を使用します。
System.Web.UI.HtmlControls を使用して、
パブリック部分クラス TestPage : System.Web.UI.Page、System.Web.UI.ICallbackEventHandler
{
protected void Page_Load(オブジェクト送信者, EventArgs e)
{
String cbReference = Page.ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context");
文字列コールバックスクリプト;
callbackScript = "関数 CallTheServer(arg,context)" +"{ " + cbReference + "} ;";
Page.ClientScript.RegisterStartupScript(this.GetType(),"abcdefg",callbackScript, true);
// 4 番目のパラメータは、<script type="text/javascript"></script> タグをスクリプトに自動的に追加するかどうかを表します。もちろん、追加する必要があります。}
public String RaiseCallbackEvent(String eventArgument)
{
return "選択したものは" +eventArgument;
}
実行結果は次のとおりです
。
3 番目のタイプ: 最初の 2 つは <input type="button" を持つ HTML コントロールですが、これがサーバー ボタンの場合はどうなるでしょうか。もちろん、バックグラウンドでサーバー ボタンの onclick 属性を追加することもできます。
フロントエンド third.aspx コード:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="third.aspx.cs" Inherits="third" %>
<html>
<頭>
<title>無題ページ</title>
</頭>
<本文>
<form id="form1" runat="server">
<div>
<select id="選択1">
<option selected="selected" value=1>ねずみの弟子</option>
<option value=2>呉奇娥先生</option>
</選択>
<asp:Button ID="Button1" runat="server" Text="これはサーバー ボタンです" /></div>
<div id="div1" />
<script type="text/javascript">
functionRe(レット)
{
document.getElementById("div1").innerHTML = ret;
アラート(ret);
}
</スクリプト>
</フォーム>
</本文>
</html>
コードビハインド:
システムを使用する;
System.Data を使用します。
System.Configuration を使用します。
System.Collections を使用します。
System.Web を使用します。
System.Web.Security を使用します。
System.Web.UI を使用します。
System.Web.UI.WebControls を使用します。
System.Web.UI.WebControls.WebParts を使用します。
System.Web.UI.HtmlControls を使用する;
3 番目のパブリック部分クラス: System.Web.UI.Page,System.Web.UI.ICallbackEventHandler
{
protected void Page_Load(オブジェクト送信者, EventArgs e)
{
//js でパラメータを渡すことができなくなったため、4 番目のパラメータは null です。 string str = Page.ClientScript.GetCallbackEventReference(this,"document.getElementById('Select1')._
options[document.getElementById('Select1').selectedIndex].text","Re",null);
//return false はフォームが送信されないようにします。Button1.Attributes.Add("onclick",str+";return false;");
#region
ICallbackEventHandler メンバー
パブリック文字列RaiseCallbackEvent(文字列eventArgument)
{
if (eventArgument == "ネズミの見習い")
{
return "ネズミ見習い: 人生はネズミのようなものです。納屋にいなければ、トイレにいるのと同じです!";
}
それ以外
{
「ウー・キワ先生:自信があり、自立していて、楽観的」と返します。
}
}
#エンドリージョン
}
ちょっとしたヒントとして、System.Web.UI.ICallbackEventHandler を書き終えた後、マウスを上に移動すると、System の前に小さなグラフが表示され、RaiseCallbackEvent コードが自動的に書き込まれます。
3つ目は最悪な感じです!