โปรดดูข้อความต้นฉบับโดย Leon.Zhou: http://pfzhou.cnblogs.com/archive/2006/03/31/363342.html
ฉันดาวน์โหลดโค้ดตัวอย่างและแปลงเป็น VB การทดสอบฟังก์ชัน AJAX สำเร็จ แต่ก็พบปัญหาเล็กๆ น้อยๆ ดังนี้
Demo1 เป็นเรื่องปกติ
Demo2 ล้มเหลวในการทดสอบบรรทัด 22 ใน AJAX.aspx.vb ตามวิธีการเขียนดั้งเดิมของ Leon ดังนั้นฉันจึงแก้ไขคุณสมบัติ OnClientClick ของ button3 โดยตรงในสภาพแวดล้อม IDE ดูบรรทัดที่ 52 ของ testAJAX.asp ทดสอบสำเร็จ
Demo3 ล้มเหลวในการเพิ่มแอตทริบิวต์ไคลเอนต์ตามวิธีการดั้งเดิม และบรรทัด 20 ใน testAJAX.aspx.vb ไม่ทำงาน ไม่รู้ว่าทำไม ดังนั้นฉันจึงเพิ่มเพียงปุ่ม 3 เพื่อทริกเกอร์เหตุการณ์ไคลเอนต์
นี่เป็นตัวอย่างที่ดีและควรค่าแก่การเรียนรู้ สำหรับคำอธิบายโดยละเอียด โปรดดูที่ข้อความต้นฉบับของผู้เขียน เมื่อทำการทดสอบ โปรดเพิ่ม <add name="NorthWind" ConnectionString="...corresponding Database Connection String..."> ใน web.config ของโครงการของคุณ
testAJAX.aspx
1<%@ ภาษาเพจ = "VB" AutoEventWireup = "false" CodeFile = "testAJAX.aspx.vb" สืบทอด = "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, บริบท)
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 + ":" + ผลลัพธ์;
19}
20
21 ฟังก์ชั่น CallServer2() ฟังก์ชั่น CallServer2(obj)
ยี่สิบสอง {
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 <div>
39 <h1>ปุ่ม Demo1:html ส่งข้อมูล</h1><br />
40 <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
41 <input id="Button1" type="button" value="ส่งไปที่ Label1" 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 <div>
50 <h1>Demo2: ปุ่มเซิร์ฟเวอร์ส่งข้อมูล</h1><br />
51 <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
52 <asp:Button ID="Button3" runat = "เซิร์ฟเวอร์" Text = "ปุ่ม" OnClientClick = "CallServer1 (TextBox2, Label3); return false; /><br />
53 <asp:Label ID="Label3" runat="server" Text="Label3:"></asp:Label></div>
54 <ชม. />
55 <div>
56 <h1>Demo3: การเชื่อมโยงข้อมูลระหว่างกล่องรายการแบบหล่นลงและ gridview</h1><br />
57 <asp:SqlDataSource ID = "SqlDataSource1" runat = "เซิร์ฟเวอร์" ConnectionString = " < % $ ConnectionStrings: NorthWind % >"
58 SelectCommand="เลือกความแตกต่าง(ประเทศ) จากลูกค้า"></asp:SqlDataSource>
59 <asp:SqlDataSource ID = "SqlDataSource2" runat = "เซิร์ฟเวอร์" ConnectionString = "< % $ ConnectionStrings: NorthWind %>"
60 SelectCommand="เลือกรหัสลูกค้า, ชื่อบริษัท, ประเทศจากลูกค้าโดยที่ ประเทศ=@ประเทศ ">
61 <เลือกพารามิเตอร์>
62 <asp:ControlParameter Name = "ประเทศ" ControlID = "DropDownList1" PropertyName = "SelectedValue" / >
63 </เลือกพารามิเตอร์>
64 </asp:SqlDataSource>
65 <div>
66 <asp:DropDownList ID = "DropDownList1" runat = "เซิร์ฟเวอร์" ความกว้าง = "239px"
67 DataSourceID = "SqlDataSource1" DataTextField = "ประเทศ" DataValueField = "ประเทศ">
68 </asp:DropDownList>
69 <input id="Button4" type="button" value="Refresh" onclick="CallServer2(DropDownList1)"/>
70 </div>
71 <br />
72 <span id="กริดสแปน">
73 <asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource2" CellPadding="4" ForeColor="#333333" GridLines="ไม่มี">
74 <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="สีขาว" />
75 <RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
76 <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="น้ำเงิน" />
77 <PagerStyle BackColor="#FFCC66" ForeColor="#333333"HorizontalAlign="Center" />
78 <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="สีขาว" />
79 <AlternatingRowStyle BackColor="สีขาว" />
80 </asp:GridView>
81 </span>
82 </div>
83 </แบบฟอร์ม>
84</ร่างกาย>
85</html>
86
testAJAX.aspx.vb
1
2ระบบการนำเข้า
3นำเข้าระบบข้อมูล
4นำเข้าระบบการกำหนดค่า
5นำเข้าระบบเว็บ
6นำเข้าระบบ เว็บ ความปลอดภัย
7นำเข้า System.Web.UI
8นำเข้า System.Web.UI.WebControls
9นำเข้า System.Web.UI.WebControls.WebParts
10นำเข้า System.Web.UI.HtmlControls
11นำเข้าระบบIO
12ระบบการนำเข้าโลกาภิวัตน์
13
14การทดสอบคลาสสาธารณะบางส่วนAJAXการทดสอบคลาสAJAX
15 สืบทอด System.Web.UI.Page
16 ใช้งาน ICallbackEventHandler
17 Page_Load ย่อยที่ได้รับการป้องกัน () Sub Page_Load (ผู้ส่ง ByVal As Object, ByVal e As EventArgs)
18 'ลงทะเบียนวิธีการประมวลผลเหตุการณ์ไคลเอนต์
19 'ดูเหมือนว่าประโยคนี้ใช้งานไม่ได้ ดังนั้นฉันจึงเพิ่มปุ่ม 4 เพิ่มเติมเพื่อกระตุ้นเหตุการณ์ไคลเอนต์โดย AndyDavis
20 DropDownList1.Attributes.Add("onchange", "CallServer2(นี้)")
21 'เหตุการณ์ไคลเอนต์ของ Button3 สามารถตั้งค่าได้โดยตรงในคุณสมบัติ OnClientClick ใน IDE ไม่จำเป็นต้องเพิ่มที่นี่โดย AndyDavis
22 'Button3.Attributes.Add("onclick", "CallServer1(TextBox2, Label3);return false;")
23 จบย่อย
ยี่สิบสี่
25 เซิร์ฟเวอร์ส่วนตัวส่งคืนเป็นสตริง
26
27 ฟังก์ชั่นสาธารณะ GetCallbackResult() ฟังก์ชั่น GetCallbackResult() ขณะที่สตริงใช้งาน ICallbackEventHandler.GetCallbackResult
28 'เพื่อความสะดวกในการดูเอฟเฟกต์การโหลด ให้เพิ่มการหน่วงเวลา
29 ระบบ.เธรด.เธรด.สลีป(2000)
30
31 Dim parts() As String = serverReturn.Split("|"c)
32 'เรียกตามชื่อวิธีที่ส่งผ่านและส่งพารามิเตอร์ที่เกี่ยวข้อง ขณะนี้รองรับเพียงพารามิเตอร์เดียวเท่านั้น
33 กลับ CStr([GetType]().GetMethod(parts(0)).Inrigg(Me, New Object() {parts(1)}))
34 สิ้นสุดฟังก์ชัน
35
36
37 Public Sub RaiseCallbackEvent() Sub RaiseCallbackEvent (ByVal eventArgument As String) ใช้งาน ICallbackEventHandler.RaiseCallbackEvent
38 serverReturn = เหตุการณ์อาร์กิวเมนต์
39 จบย่อย
40
41 'ตามชื่อประเทศภาษาอังกฤษหรือตัวย่อที่ส่งจากลูกค้าให้แปลเป็นชื่อประเทศจีนที่สอดคล้องกัน
42 ฟังก์ชั่นสาธารณะ ServerMethod1 () ฟังก์ชั่น ServerMethod1 (ByVal arg As String) As String
43 Dim เป็นสตริง = ""
44 เลือกกรณี arg.ToLower()
45 กรณี "cn"
46 กรณี "จีน"
47 วินาที = "จีน"
48 ออก เลือก
49 กรณี "พวกเรา"
50 วินาที = "สหรัฐอเมริกา"
51 ออก เลือก
52 กรณีอื่น
53 วินาที = "ประเทศที่ไม่รู้จัก"
54 ออก เลือก
55 สิ้นสุดการเลือก
56 การกลับมา
57 สิ้นสุดฟังก์ชัน
58
59 'อัปเดตเนื้อหาของ GridView ตามค่าที่ส่งจากไคลเอนต์ และส่งคืน html ของ GridView ที่อัปเดต
60 ฟังก์ชั่นสาธารณะ ServerMethod2 () ฟังก์ชั่น ServerMethod2 (ByVal arg As String) As String
61 DropDownList1.SelectedValue = หาเรื่อง
62 GridView1.DataBind()
63
64 ส่งคืน RenderControl (GridView1)
65 สิ้นสุดฟังก์ชัน
66
67 ฟังก์ชันโอเวอร์โหลดส่วนตัว RenderControl()ฟังก์ชัน RenderControl(การควบคุม ByVal As Control) As String
68 Dim Writer1 As StringWriter = New StringWriter(CultureInfo.InvariantCulture)
69 Dim Writer2 เป็น HtmlTextWriter = HtmlTextWriter ใหม่ (writer1)
70
71 การควบคุม RenderControl (writer2)
72 นักเขียน2.ฟลัช()
73 นักเขียน2.ปิด()
74
75 ส่งคืนผู้เขียน 1.ToString ()
76 สิ้นสุดฟังก์ชัน
77จบคลาส
78