Leon.Zhou の原文を参照してください: http://pfzhou.cnblogs.com/archive/2006/03/31/363342.html
サンプル コードをダウンロードして、AJAX 関数のテストに成功しました。しかし、いくつかの小さな問題が発生しました。
Demo1は正常です。
Demo2 は、Leon の元の記述方法に従って、AJAX.aspx.vb の 22 行目のテストに失敗しました。そこで、IDE 環境で button3 の OnClientClick プロパティを直接変更しました (testAJAX.asp の 52 行目を参照)。テストは成功しました。
Demo3 は元の方法に従ってクライアント属性を正常に追加できず、testAJAX.aspx.vb の行 20 が機能しませんでした。理由はわかりません。 したがって、クライアント イベントをトリガーするために button3 を追加しただけです。
これは良い例であり、原理の詳細な説明については、著者の原文を参照してください。テストするときは、プロジェクトの web.config に <add name="NorthWind" connectionString="...対応するデータベース接続文字列..."> を追加してください。
testAJAX.aspx
1<%@ Page Language="VB" AutoEventWireup="false" CodeFile="testAJAX.aspx.vb" Inherits="testAJAX" %>
2
3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
4
5<html xmlns=" http://www.w3.org/1999/xhtml " >
6<head id="Head1" runat="server">
7 <title>更新なしの ASP.NET 2.0 ページ送信のデモ</title>
8 <script type="text/javascript" language ="javascript">
9 関数 CallServer1() 関数 CallServer1(inputcontrol, context)
10 {
11 context.innerHTML = "<IMG SRC='images/pie.gif' />読み込み中";
12 arg = 'ServerMethod1|' + inputcontrol.value;
13 <%= ClientScript.GetCallbackEventReference(Me, "arg", "ReceiveServerData1", "context")%>;
14}
15
16 関数 ReceiveServerData1()関数 ReceiveServerData1(結果、コンテキスト)
17 {
18 context.innerHTML = context.id + ":" + result;
19}
20
21 関数 CallServer2() 関数 CallServer2(obj)
22 {
23 コンテキスト = グリッドスパン;
24 context.innerHTML = "<IMG SRC='images/pie.gif' />データを読み込んでいます";
25 arg = "ServerMethod2|" + obj.value;
26 <%= ClientScript.GetCallbackEventReference(Me, "arg", "ReceiveServerData2", "context")%>;
27}
28
29 関数 ReceiveServerData2()関数 ReceiveServerData2(結果、コンテキスト)
30 {
31 context.innerHTML = 結果;
32}
33
34 </スクリプト>
35</頭>
36<ボディ>
37 <form id="form1" runat="server">
38 <ディビジョン>
39 <h1>Demo1:html ボタンでデータを送信します</h1><br />
40 <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
41 <input id="Button1" type="button" value="ラベル 1 に送信" onclick="CallServer1(TextBox1, Label1)"/>
42 <input id="Button2" type="button" value="Label2 に送信" onclick="CallServer1(TextBox1, Label2)"/>
43<br />
44 <asp:Label ID="Label1" runat="server" Text="Label1:"></asp:Label>
45<br />
46 <asp:Label ID="Label2" runat="server" Text="Label2:"></asp:Label>
47 </div>
48 <時間 />
49 <ディビジョン>
50 <h1>デモ 2: サーバー ボタンがデータを送信する</h1><br />
51 <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
52 <asp:Button ID="Button3" runat="server" Text="Button" OnClientClick="CallServer1(TextBox2, Label3);return false;"
53 <asp:Label ID="Label3" runat="server" Text="Label3:"></asp:Label></div>
54 <時間 />
55 <ディビジョン>
56 <h1>デモ 3: ドロップダウン リスト ボックスとグリッドビューの間のデータのバインド</h1><br />
57 <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ connectionStrings:NorthWind %>"
58 SelectCommand="顧客から異なる (国) を選択"></asp:SqlDataSource>
59 <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ connectionStrings:NorthWind %>"
60 SelectCommand=" country=@ Countryの顧客から顧客 ID、会社名、国を選択 ">
61 <パラメータの選択>
62 <asp:ControlParameter Name=" Country" ControlID="DropDownList1" PropertyName="SelectedValue" />
63 </パラメータの選択>
64 </asp:SqlDataSource>
65 <ディビジョン>
66 <asp:DropDownList ID="DropDownList1" runat="サーバー" 幅="239px"
67 データソースID="SqlDataSource1" データテキストフィールド="国" データ値フィールド="国">
68 </asp:ドロップダウンリスト>
69 <input id="Button4" type="button" value="Refresh" onclick="CallServer2(DropDownList1)"/>
70 </div>
71<br />
72 <スパン id="グリッドスパン">
73 <asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource2" CellPadding="4" ForeColor="#333333" GridLines="None">
74 <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
75 <RowStyle BackColor="#FFFFBD6" ForeColor="#333333" />
76 <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
77 <PagerStyle BackColor="#FFCC66" ForeColor="#333333" horizontalAlign="Center" />
78 <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
79 <AlternatingRowStyle BackColor="白" />
80 </asp:GridView>
81
82 </div>
83 </form>
84</ボディ>
85</html>
86
testAJAX.aspx.vb
1
2輸入システム
3System.Dataのインポート
4System.Configurationのインポート
5System.Webのインポート
6System.Web.Securityのインポート
7System.Web.UIのインポート
8System.Web.UI.WebControls をインポートします
9System.Web.UI.WebControls.WebParts をインポートします
10System.Web.UI.HtmlControls のインポート
11System.IO のインポート
12システムのインポート.グローバリゼーション
13
14部分公開クラス testAJAXクラス testAJAX
15 System.Web.UI.Page の継承
16 ICallbackEventHandlerの実装
17 Protected Sub Page_Load()Sub Page_Load(ByVal sender As Object、ByVal e As EventArgs)
18 'クライアントイベント処理メソッドの登録
19 'この文は機能しなかったようなので、クライアント イベントをトリガーするボタン 4 を追加しました by AndyDavis
20 DropDownList1.Attributes.Add("onchange", "CallServer2(this)")
21 'Button3 のクライアント イベントは、IDE の OnClientClick プロパティで直接設定できます。ここに追加する必要はありません by AndyDavis
22 'Button3.Attributes.Add("onclick", "CallServer1(TextBox2, Label3);return false;")
23 エンドサブ
24
25 プライベートサーバー文字列として返す
26
27 パブリック関数 GetCallbackResult()Function GetCallbackResult() As String は ICallbackEventHandler.GetCallbackResult を実装します
28 'ローディング効果を見やすくするために、遅延を追加します
29 System.Threading.Thread.Sleep(2000)
30
31 Dim Parts() As String =serverReturn.Split("|"c)
32 ' 渡されたメソッド名に従って呼び出し、対応するパラメータを渡します。現在サポートされているパラメータは 1 つだけです。
33 Return CStr([GetType]().GetMethod(parts(0)).Invoke(Me, New Object() {parts(1)}))
34 終了機能
35
36
37 Public Sub RaiseCallbackEvent()Sub RaiseCallbackEvent(ByVal eventArgument As String) ICallbackEventHandler.RaiseCallbackEvent を実装します
38 サーバーリターン = イベント引数
39 エンドサブ
40
41 'クライアントから送信された英語の国名または略称に従って、対応する中国語の国名に翻訳します
42 パブリック関数 ServerMethod1()Function ServerMethod1(ByVal arg As String) As String
43 文字列としてのディム = ""
44 ケースの選択 arg.ToLower()
45 ケース「cn」
46 ケース「中国」
47秒 = 「中国」
48 終了選択
49 ケース「私たち」
50年代=「アメリカ」
51 終了選択
52 それ以外の場合
53秒 = 「未知の国」
54 終了選択
55 エンドセレクト
56 返品
57 終了機能
58
59 'クライアントから渡された値に基づいてGridViewのコンテンツを更新し、更新されたGridViewのHTMLを返します
60 パブリック関数 ServerMethod2()Function ServerMethod2(ByVal arg As String) As String
61 DropDownList1.SelectedValue = 引数
62 グリッドビュー1.DataBind()
63
64 RenderControl(GridView1)を返す
65 終了機能
66
67 プライベート オーバーロード Function RenderControl()Function RenderControl(ByVal control As Control) As String
68 Dim Writer1 As StringWriter = New StringWriter(CultureInfo.InvariantCulture)
69 Dim Writer2 As HtmlTextWriter = New HtmlTextWriter(writer1)
70
71 コントロール.RenderControl(writer2)
72 ライター2.Flush()
73 ライター2.Close()
74
75 ライター1.ToString()を返す
76 終了機能
77エンドクラス
78