Asp 페이지 클라이언트 콜백 기능, 즉 ICallback EventHandler 인터페이스 사용 노트

26293 단어 callback
오늘 【Asp.NET 3.5 SP1 고급 프로그래밍 (제6판) 중국어 버전】을 보았을 때, 클라이언트 리셋을 보았는데, 이전에는 Asp의 리셋 함수만 알았다PostBack(), 오늘 메아리를 보면 좀 어려워요. (나란 작은 새에게) 과연 하나의 예를 보면 아무리 봐도 모르겠어요. 자기가 테스트를 해봐야 이런 걸 알 수 있어요. 그런데 그 원리를 몰라요. 나중에 알게 될 거예요. 본론을 시작해요.다음은 클라이언트 리셋 기능(Icallback EventHandler 인터페이스)이 어떻게 실현되는지 예를 통해 설명한다.
페이지 코드:
 1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="RandomNumber.aspx.cs" Inherits="RandomNumber" %>
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 runat="server">
7 <title> Web </title>
8 <script type="text/javascript">
9 function GetNumber()
10 {
11 UseCallback();
12 }
13
14 function GetRandomNumberFromServer(TextBox1, context)
15 {
16 document.forms[0].TextBox1.value =TextBox1;
17 }
18 </script>
19 <script type="text/javascript">
20 function CallServer(index)
21 {
22 UseServerEvent(index);
23 }
24
25 function GetValueFromServer(value, value2)
26 {
27 document.forms[0].TextBox2.value =value;
28 //alert(value);
29 //alert(value2);
30 }
31 </script>
32 </head>
33 <body>
34 <form id="form1" runat="server">
35 <div>
36 <input type="button" id="Button1" value="Get Random Number" onclick="GetNumber()" />
37 <br />
38 <br />
39 <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
40 </div>
41 <hr />
42 <h3> </h3>
43 <div>
44 <input type="button" id="Button2" value="Get Return Value" onclick="CallServer('Jolin')" />
45 <br />
46 <br />
47 <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
48 </div>
49 <hr />
50 </form>
51 </body>
52 </html>

백그라운드 코드:
 1 using System;
2 using System.Collections;
3 using System.Configuration;
4 using System.Data;
5 using System.Linq;
6 using System.Web;
7 using System.Web.Security;
8 using System.Web.UI;
9 using System.Web.UI.HtmlControls;
10 using System.Web.UI.WebControls;
11 using System.Web.UI.WebControls.WebParts;
12 using System.Xml.Linq;
13
14 public partial class RandomNumber : System.Web.UI.Page, System.Web.UI.ICallbackEventHandler
15 {
16 private string _callbackResult = null;
17 protected void Page_Load(object sender, EventArgs e)
18 {
19 if (!IsPostBack)
20 {
21 /*
22 cbReference:
23 WebForm_DoCallback('__Page',arg,GetRandomNumberFromServer,context,null,false)
24
25 cbScript:
26 function UseCallback(arg, context){WebForm_DoCallback('__Page',arg,GetRandomNumberFromServer,context,null,false);}
27
28 html JS:
29 <script type="text/javascript">
30 //<![CDATA[
31 function UseCallback(arg, context)
32 {
33 WebForm_DoCallback('__Page',arg,GetRandomNumberFromServer,context,null,false);
34 }
35 //]]>
36 </script>
37 * */
38
39 /*cbReference JS , :GetRandomNumberFromServer( n>-1 )
40 * this:
41 * arg: Asp.Net (WebForm_DoCallback) 2
42 * context: Asp.Net (WebForm_DoCallback) 4
43 * */
44 string cbReference = Page.ClientScript.
45 GetCallbackEventReference(this, "arg", "GetRandomNumberFromServer", "context");
46
47 /*UseCallback JS , aspx A,
48 UseCallback ( )。
49 * */
50 string cbScript = "function UseCallback(arg, context)" +
51 "{" + cbReference + ";}";
52
53 /*
54 * RegisterClientScriptBlock , JS 。
55 * “<script type="text/javascript"></script>” , true。
56 * */
57 Page.ClientScript.RegisterClientScriptBlock(this.GetType(),
58 "UseCallback", cbScript, true);
59
60
61 // ( "Jolin")
62 string cbReference2 = Page.ClientScript.GetCallbackEventReference(this, "arg", "GetValueFromServer", "context");
63 string cbScript2 = "function UseServerEvent(arg, context)" +
64 "{" + cbReference2 + ";}";
65 Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "UseServerEvent", cbScript2, true);
66 }
67
68 }
69
70 #region ICallbackEventHandler Members
71
72 public string GetCallbackResult()
73 {
74 return _callbackResult;
75 }
76
77 public void RaiseCallbackEvent(string eventArgument)
78 {
79 if (string.IsNullOrEmpty(eventArgument) || !("Jolin".Equals(eventArgument)))
80 {
81 Random rnd = new Random();
82 _callbackResult = rnd.Next().ToString();
83 }
84 else
85 {
86 _callbackResult = "Jolin, I love you!";
87 }
88 }
89
90 #endregion
91 }

테스트 결과:
첫 번째 버튼인'Get Random Number'를 클릭하면 그 아래 입력란에 무작위 숫자가 표시되고, 두 번째 버튼인'Get Return Value'를 클릭하면'Jolin, I love you!'로 돌아갑니다.
설명:
상술한 코드에는 이미 몇 가지 해석이 포함되어 있습니다. 다음은 전체 절차를 대상으로 자신의 이해에 따라 해석하는 것입니다. 만약에 잘못된 점이 있으면 아낌없이 가르쳐 주십시오!
1. 클라이언트가 직접 또는 간접적으로 함수를 호출한다: UseCallback()이고 함수 UseCallback()는 서버 측에서 동적으로 출력한다. 리셋 기능이 있는 함수(파라미터가 있음) 2. 서버가 클라이언트에게 전달한 정보를 수신하고 ICallback EventHandler 인터페이스를 호출하는RaiseCallback Event(string eventArgument) 함수를 포함한다.분석(eventArgument)과 계산을 한 다음GetCallbackResult()을 통해 클라이언트 3, 클라이언트가 서버의 계산 결과를 받는 함수인 GetValueFromServer()는 이미 UseCallback()에 표시되어 있기 때문에 값을 GetValueFromServer() 함수에 전달하고 HTML 컨트롤 값을 부여하여 사용자에게 나타낼 수 있습니다.
자, 앞으로 리콜도 배워야 돼요. 그때 새로운 이해가 있으면 다시 올게요.
**참고: 문자를 부호화하는 과정에서 정원의 입력 컨트롤이 약간 버그인 것을 발견했습니다. 영문 상태(따옴표 포함)의 문자를 밖에서 편집 상자로 복사하면 그 뒤에 있는 중국어 따옴표가 변모할 수 있습니다.'->','->'를 빼면 정상입니다. 복제된 문자에 형식이 있을 수 있으니 높은 사람이 대답해 주십시오.
연.
2012.03.29

좋은 웹페이지 즐겨찾기