การเรียกกลับไคลเอ็นต์ของ Asp.Net2.0 เป็นวิธีที่น่าตื่นเต้นมาก ซึ่งช่วยให้เราสามารถควบคุมข้อมูลที่จะส่งข้อมูลไปยังเซิร์ฟเวอร์ได้โดยไม่ต้องส่งทั้งหน้า ในเวลาเดียวกัน เซิร์ฟเวอร์จะส่งคืนเฉพาะข้อมูลที่คุณต้องการโดยไม่ต้องส่งกลับ . ทั้งหน้า.
ก่อนอื่น เราต้องพูดถึงวิธีการที่สำคัญมาก: GetCallbackEventRefernce ฉันเขียนความเข้าใจของฉันลงไปแล้ว โปรดชี้ให้เห็นด้วย
GetCallbackEventReference จะใช้เมธอด RaiseCallbackEvent ก่อน ซึ่งอนุญาตให้สคริปต์ไคลเอนต์ส่งพารามิเตอร์ไปยังเซิร์ฟเวอร์ จากนั้นส่งคืนค่าของเมธอด RaiseCallBackEvent ไปยังพารามิเตอร์ที่คุณลงทะเบียนในเมธอด GetCallbackEventRefernce (จริงๆ แล้วมันเป็นสคริปต์ที่คุณต้องการเขียนบนไคลเอนต์ด้วย ). หากต้องการเรียก GetCallbackEventRefernce คุณต้องส่งพารามิเตอร์สองตัวจากสคริปต์ไคลเอนต์ ตัวหนึ่งคือค่าที่จะส่งผ่านไปยังเหตุการณ์ RaiseCallbackEvent และอีกตัวคือบริบท
ความหมายของพารามิเตอร์มีดังนี้:
อันดับแรก: เพจหรือเซิร์ฟเวอร์ควบคุมสิ่งนั้น ใช้อินเทอร์เฟซ ICallbackEventHandler เขียนสิ่งนี้เพื่อแสดงหน้าก่อนหน้า
ประการที่สอง: แสดงถึงค่าที่คุณต้องการส่งผ่านจากไคลเอนต์ไปยังเมธอด RaiseCallbackEvent ของเซิร์ฟเวอร์
ประการที่สาม: ฟังก์ชัน js ที่คุณต้องการเขียนบนไคลเอนต์ ในเวลาเดียวกัน เซิร์ฟเวอร์จะส่งผ่านข้อมูลที่คำนวณไปยังฟังก์ชันนี้ด้วย พารามิเตอร์ฟังก์ชันนี้
ประการที่สี่: ฉันไม่รู้ว่าบริบทหมายถึงอะไร โค้ดที่ GetCallbackEventRefernce ส่งไปยังไคลเอนต์มีดังนี้:
WebForm_DoCallback('__Page',arg,ReceiveServerData,context,null,false)
แล้วเราควรทำอย่างไรเพื่อรับคำขอจาก ลูกค้า? จะโทรหาเขาได้อย่างไร? ฉันเห็นสามวิธี:
วิธีแรก: เขียนสตริงสาธารณะในพื้นหลังและกำหนดใน Page_Load: =Page.ClientScript.GetCallbackEventReference(this, "message", "ShowServerTime", "context"); ให้ความสนใจที่นี่ มันคือเพจ .ClientScrip เนื่องจากจะส่งคืน ClientScriptManager ซึ่งจัดการสคริปต์ไคลเอนต์ทั้งหมด จากนั้นในเหตุการณ์ onclick ของปุ่มที่อยู่เบื้องหน้า <%=สตริงพื้นหลังสาธารณะ%> สร้างโค้ดทดลองเล็กๆ ดังนี้:
Frontend ServerTime.aspx: เพื่อความสะดวก ให้ลบ html<%@ page language="
ที่ไม่มีประโยชน์จำนวนมากออก
C#" CodeFile="ServerTime.aspx.cs" สืบทอด = "ServerTime_aspx" %>
<html>
<หัว>
<หัวข้อ>เวลาเซิร์ฟเวอร์</หัวข้อ>
<script language="javascript">
ฟังก์ชั่น GetServerTime()
-
ข้อความ var = '';
บริบท var = '';
<%=sCallBackFunctionInvocation%>
}
ฟังก์ชัน ShowServerTime (ข้อความเวลา บริบท) {
alert('เวลาปัจจุบันบนเซิร์ฟเวอร์คือ:n' + timeMessage);
-
</สคริปต์><
</หัว><
<ร่างกาย>
<form id="MainForm" runat="server">
<input type="button" value="รับเวลาเซิร์ฟเวอร์" onclick="GetServerTime();" />
</แบบฟอร์ม>
</ตัว>
</html>
แบ็กเอนด์:
กำลังใช้ระบบ;
ใช้ System.Web.UI;
ServerTime_aspx คลาสสาธารณะบางส่วน: หน้า, ICallbackEventHandler
-
//ต้องแน่ใจว่าได้ใช้ข้อแก้ตัว ICallbackEventHandler สาธารณะ sCallBackFunctionInvocation;
void Page_Load(ผู้ส่งวัตถุ, System.EventArgs e)
-
sCallBackFunctionInvocation = Page.ClientScript.GetCallbackEventReference (นี่คือ "ข้อความ", "ShowServerTime", "บริบท");
}
สตริงสาธารณะ RaiseCallbackEvent (สตริง eventArgument)
-
กลับ DateTime.Now.ToString();
-
}
วิ่ง คลิกปุ่มและผลลัพธ์จะเป็นดังนี้:
วิธีที่สอง: ในวิธีการข้างต้น เราต้องผูกพื้นหลังไว้กับพื้นหน้า แล้วถ้าเราไม่ผูกมันล่ะ เราทำสิ่งนี้:
ใช้ GetCallbackEventReference โดยตรงเป็นเนื้อหาการใช้งานในฟังก์ชัน js จากนั้นลงทะเบียนฟังก์ชัน js นี้กับไคลเอนต์
รหัส TestPage ส่วนหน้า:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestPage.aspx.cs" Inherits="TestPage" %>
<html>
<หัว>
<หัวข้อ>หน้าที่ไม่มีชื่อ</หัวข้อ>
<script type="text/javascript">
การทดสอบฟังก์ชัน ()
-
var lb = document.getElementById("Select1");
//กล่องแบบเลื่อนลงที่จะใช้ var con = lb.options[lb.selectedIndex].text;
// รับข้อความของกล่องดรอปดาวน์ที่คุณเลือกแล้วเรียก CallTheServer ซึ่งเป็นฟังก์ชัน js ที่ส่งออกโดยเซิร์ฟเวอร์ CallTheServer(con,'');
-
ฟังก์ชั่นReceiveServerData (rValue)
-
Results.innerHTML = rValue;
-
</สคริปต์><
</หัว><
<ร่างกาย>
<form id="form1" runat="server">
<div>
<เลือก id="Select1"><
<option value=1 Selected="selected" > สาวกเมาส์ </option >
<option value=2">ปรมาจารย์อู๋ ฉีหวา </option>
</เลือก><
<br />
<br />
<input onclick="test()" value="ส่งคืนข้อความกล่องแบบเลื่อนลงจากเซิร์ฟเวอร์" type=button>
<br />
<br />
<span ID="ผลลัพธ์""></span>
<br />
</div><
</แบบฟอร์ม>
</ตัว>
</html>
รหัสแบ็กเอนด์:
การใช้ระบบ;
ใช้ System.Data;
โดยใช้ระบบการกำหนดค่า;
ใช้ 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
-
โมฆะที่ได้รับการป้องกัน Page_Load (ผู้ส่งวัตถุ EventArgs e)
-
สตริง cbReference = Page.ClientScript.GetCallbackEventReference (นี่, "arg", "ReceiveServerData", "บริบท");
สตริงการเรียกกลับสคริปต์;
callbackScript = "ฟังก์ชั่น CallTheServer (arg, บริบท)" +"{ " + cbReference + "} ;";
Page.ClientScript.RegisterStartupScript(this.GetType(),"abcdefg",callbackScript, จริง);
//พารามิเตอร์ที่สี่แสดงว่าจะเพิ่มแท็ก <script type="text/javascript"></script> ลงในสคริปต์โดยอัตโนมัติหรือไม่ ซึ่งแน่นอนว่าต้องเพิ่มไว้}
สาธารณะ String RaiseCallbackEvent (สตริง eventArgument)
-
กลับ "สิ่งที่คุณเลือกคือ" + eventArgument;
-
}
ต่อไปนี้เป็นผลการดำเนินการ:
ประเภทที่สาม: สองอันแรกเป็นตัวควบคุม HTML ที่มี <input type="button" แล้วถ้าเป็นปุ่มเซิร์ฟเวอร์ล่ะ? แน่นอน คุณยังสามารถเพิ่มแอตทริบิวต์ onclick ของปุ่มเซิร์ฟเวอร์ในพื้นหลังได้
รหัส front-end three.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="third.aspx.cs" Inherits="third" %>
<html>
<หัว>
<หัวข้อ>หน้าที่ไม่มีชื่อ</หัวข้อ>
</หัว><
<ร่างกาย>
<form id="form1" runat="server">
<div>
<เลือก id="Select1"><
<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;
แจ้งเตือน(เกษียณ);
-
</สคริปต์><
</แบบฟอร์ม>
</ตัว>
</html>
รหัสด้านหลัง:
ใช้ระบบ;
ใช้ System.Data;
โดยใช้ระบบการกำหนดค่า;
ใช้ System.Collections;
ใช้ System.Web;
โดยใช้ System.Web.Security;
โดยใช้ System.Web.UI;
ใช้ System.Web.UI.WebControls;
ใช้ System.Web.UI.WebControls.WebParts;
ใช้ System.Web.UI.HtmlControls
คลาสสาธารณะบางส่วนที่สาม: System.Web.UI.Page,System.Web.UI.ICallbackEventHandler
-
โมฆะที่ได้รับการป้องกัน Page_Load (ผู้ส่งวัตถุ EventArgs e)
-
//พารามิเตอร์ที่สี่เป็นโมฆะ เนื่องจากคุณไม่สามารถส่งพารามิเตอร์ไปยังพารามิเตอร์นั้นใน js ได้อีกต่อไป 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;");
}
#ภูมิภาค สมาชิก ICallbackEventHandler
สตริงสาธารณะ RaiseCallbackEvent (สตริง eventArgument)
-
ถ้า (eventArgument == "หนูฝึกหัด")
-
return "หนูฝึกหัด: ชีวิตก็เหมือนหนู ถ้าไม่อยู่ในโรงนา ก็อยู่ในส้วม!";
-
อื่น
-
กลับ "ปรมาจารย์ Wu Qiwa: มั่นใจ พึ่งพาตนเอง มองโลกในแง่ดี";
-
-
#ภูมิภาคสุดท้าย
-
เคล็ดลับเล็กๆ น้อยๆ หลังจากเขียน System.Web.UI.ICallbackEventHandler เสร็จแล้ว ให้เลื่อนเมาส์ขึ้น จะมีแผนภูมิเล็กๆ ปรากฏอยู่ด้านหน้า System คลิกที่ภาพเพื่อเขียนโค้ด RaiseCallbackEvent โดยอัตโนมัติ โดยจะมีลักษณะดังนี้
คนที่สามรู้สึกแย่ที่สุด!