Leon.Zhou의 원본 텍스트를 참조하십시오: http://pfzhou.cnblogs.com/archive/2006/03/31/363342.html.
샘플 코드를 다운로드하여 AJAX 기능 테스트에 성공했습니다. 그러나 몇 가지 작은 문제가 발생했습니다.
데모1은 정상입니다.
Demo2는 Leon의 원래 작성 방법에 따라 AJAX.aspx.vb에서 Line 22를 테스트하지 못했습니다. 그래서 IDE 환경에서 Button3의 OnClientClick 속성을 직접 수정했습니다. testAJAX.asp의 52번째 줄을 참조하세요. 테스트에 성공했습니다.
Demo3은 원래 방법에 따라 클라이언트 특성을 성공적으로 추가하지 못했고 testAJAX.aspx.vb의 20행이 작동하지 않았습니다. 이유를 모르겠어요. 그래서 클라이언트 이벤트를 트리거하기 위해 버튼 3만 추가했습니다.
이는 좋은 예이며 배울 가치가 있습니다. 원리에 대한 자세한 설명은 저자의 원문을 참조하세요. 테스트할 때 프로젝트의 web.config에 <add name="NorthWind" ConnectionString="...corresponding Database Connection String...">을 추가하세요.
testAJAX.aspx
1<%@ 페이지 언어="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="서버">
7 <title>새로 고침 데모 없이 ASP.NET 2.0 페이지 제출</title>
8 <script type="text/javascript" 언어 ="javascript">
9 함수 CallServer1() 함수 CallServer1(inputcontrol, context)
10 {
11 context.innerHTML = "<IMG SRC='images/pie.gif' />로드 중";
12 인수 = 'ServerMethod1|' + inputcontrol.value;
13 <%= ClientScript.GetCallbackEventReference(Me, "arg", "ReceiveServerData1", "context")%>;
14}
15
16 함수 수신서버데이터1()함수 수신서버데이터1(결과, 컨텍스트)
17 {
18 context.innerHTML = context.id + ":" + 결과;
19}
20
21 함수 CallServer2() 함수 CallServer2(obj)
스물 둘 {
23 컨텍스트 = 그리드 범위;
24 context.innerHTML = "<IMG SRC='images/pie.gif' />데이터 로딩 중";
25 인수 = "ServerMethod2|" + obj.value;
26 <%= ClientScript.GetCallbackEventReference(Me, "arg", "ReceiveServerData2", "context")%>;
27}
28
29 함수 수신서버데이터2()함수 수신서버데이터2(결과, 컨텍스트)
30 {
31 context.innerHTML = 결과;
32}
33
34 </스크립트>
35</head>
36<본문>
37 <form id="form1" runat="서버">
38 <div>
39 <h1>Demo1:html 버튼으로 데이터 제출</h1><br />
40 <asp:TextBox ID="TextBox1" runat="서버"></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>데모2: 서버 버튼이 데이터를 제출합니다</h1><br />
51 <asp:TextBox ID="TextBox2" runat="서버"></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 <div>
56 <h1>데모3: 드롭다운 목록 상자와 그리드뷰 간의 데이터 바인딩</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=" 국가=@국가 인 고객 중에서 고객 ID, 회사 이름, 국가를 선택하십시오. ">
61 <매개변수 선택>
62 <asp:ControlParameter Name="국가" ControlID="DropDownList1" PropertyName="SelectedValue" />
63 </SelectParameters>
64 </asp:SqlDataSource>
65 <div>
66 <asp:DropDownList ID="DropDownList1" runat="서버" Width="239px"
67 DataSourceID="SqlDataSource1" DataTextField="국가" DataValueField="국가">
68 </asp:드롭다운리스트>
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="가운데" />
78 <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="흰색" />
79 <AlternatingRowStyle BackColor="흰색" />
80 </asp:그리드뷰>
81 </span>
82 </div>
83 </form>
84</body>
85</html>
86
testAJAX.aspx.vb
1
2수입 시스템
3시스템.데이터 가져오기
4시스템.구성 가져오기
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부분 공개 클래스 테스트AJAX클래스 테스트AJAX
15 System.Web.UI.Page 상속
16 ICallbackEventHandler 구현
17 보호된 하위 페이지_Load()Sub Page_Load(ByVal 보낸 사람을 개체로, ByVal e를 EventArgs로)
18 '클라이언트 이벤트 처리방법 등록
19 '이 문장이 안되는 것 같아서 AndyDavis의 클라이언트 이벤트를 트리거하기 위해 추가 버튼4를 추가했습니다.
20 DropDownList1.Attributes.Add("onchange", "CallServer2(this)")
21 'Button3의 클라이언트 이벤트는 IDE의 OnClientClick 속성에서 직접 설정할 수 있으므로 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)).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 Dim s As String = ""
44 사례 선택 arg.ToLower()
45 케이스 "cn"
46 사례 "중국"
47초 = "중국"
48 종료 선택
49 사건 "우리"
50초 = "미국"
51 종료 선택
52 다른 경우
53 s = "알 수 없는 국가"
54 종료 선택
55 선택 종료
56 반품
57 종료 기능
58
59 '클라이언트에서 전달된 값을 기반으로 GridView의 내용을 업데이트하고 업데이트된 GridView의 html을 반환합니다.
60 공용 함수 ServerMethod2()Function ServerMethod2(ByVal arg As String) As String
61 DropDownList1.SelectedValue = 인수
62 그리드뷰1.데이터바인드()
63
64 렌더컨트롤(GridView1) 반환
65 종료 기능
66
67 개인 오버로드 함수 RenderControl()Function RenderControl(ByVal control As Control) As String
68 Dimwriter1 As StringWriter = New StringWriter(CultureInfo.InvariantCulture)
69 희미한 작가2 As HtmlTextWriter = New HtmlTextWriter(writer1)
70
71 제어.렌더컨트롤(writer2)
72 작가2.플러시()
73 작가2.닫기()
74
75 작성자1.ToString()을 반환합니다.
76 종료 기능
77수업 종료
78