เปิด
ตัวการเรียกกลับไคลเอ็นต์ของ
Asp.Net 2.0 แล้ว2.0 มีคุณสมบัติใหม่มากมาย และการเรียกกลับของลูกค้าก็เป็นหนึ่งในนั้น การเรียกกลับของไคลเอ็นต์ช่วยให้เราสามารถเรียกเมธอดฝั่งเซิร์ฟเวอร์โดยไม่ต้อง postbacks ซึ่งสอดคล้องกับฟังก์ชันที่ AJAX มอบให้ แต่ไม่ยืดหยุ่นเท่ากับ AJAX สามารถปรับแต่งวิธีการเรียกได้ แต่ฟังก์ชันการเรียกกลับที่มาพร้อมกับ 2.0 ไม่สามารถทำได้ เมื่อต้องการใช้ฟังก์ชันการเรียกกลับของไคลเอ็นต์ คุณต้องใช้อินเทอร์เฟซ system.Web.UI.IcallbackEventHandler
อินเทอร์เฟซนี้มีสองวิธี
//วิธีนี้จะถูกเรียกเสมอเมื่อไคลเอ็นต์โทรกลับ
โมฆะสาธารณะ RaiseCallbackEvent (String eventArgument)
//เมธอดนี้จะถูกเรียกหลังจากดำเนินการ RaiseCallbackEvent ค่าที่ส่งคืนของวิธีนี้จะถูกส่งกลับไปยังไคลเอนต์
สตริงสาธารณะ GetCallbackResult()
ตัวอย่าง:
.cs:
สตริง cbReference = Page.ClientScript.GetCallbackEventReference(
นี้, "หาเรื่อง", "ReceiveServerData", "บริบท");
สตริงการเรียกกลับสคริปต์;
callbackScript = "ฟังก์ชั่น CallServer (arg, บริบท)" + "{ " + cbReference + "} ;";
หน้า ClientScript.RegisterClientScriptBlock(
this.GetType(),"CallServer", callbackScript, จริง);
จาวาสคริปต์:
ความรู้เบื้องต้นเกี่ยวกับ AJAX
AJAX ไม่ใช่เทคโนโลยีใหม่ แต่เป็นการผสมผสานแบบออร์แกนิกของเทคโนโลยีที่มีอยู่บางอย่าง ซึ่งรวมถึง: XmlHttp, Reflect โดยทั่วไปกรอบงาน AJAX ประกอบด้วย: HttpHandler แบบกำหนดเองและโค้ด JavaScript หนึ่งชิ้น
กลไกการทำงานของ AJAX
ในอดีตเมื่อเราใช้ XmlHttp เพื่อใช้งานเพจที่ไม่รีเฟรช เราใช้ ความแตกต่างก็คือ HttpHandler ของเพจนี้ถูกใช้งานด้วยตัวเอง
สร้าง AJAX ของคุณเอง:
1. ก่อนอื่น เราต้องใช้ตัวจัดการ Http (HttpHandler) เพื่อตอบสนองคำขอของไคลเอนต์:
ในการใช้ HttpHandler แบบกำหนดเอง คุณจะต้องใช้อินเทอร์เฟซ IHttpHandler
อินเทอร์เฟซประกอบด้วยหนึ่งคุณสมบัติและหนึ่งวิธี:
bool IHttpHandler.IsReusable
เป็นโมฆะ IHttpHandler.ProcessRequest (บริบท HttpContext)
ตัวอย่าง:
บูล IHttpHandler.IsReusable
-
รับ { คืนค่าจริง }
-
เป็นโมฆะ IHttpHandler.ProcessRequest (บริบท HttpContext)
-
context.Response.Clear(); // รับวิธีการที่จะเรียก
methodName สตริง = context.Request.QueryString ["ฉัน"];
//รับข้อมูลการประกอบ
//Czhenq.AJAX.Class1.Dencode เป็นวิธีการเข้ารหัสสตริงแบบกำหนดเอง
สตริง AssemblyName = Czhenq.AJAX.Class1.Dencode(context.Request.QueryString["as"]);
// รับพารามิเตอร์วิธีการ
string Arguments = context.Request.QueryString["ar"]; //เริ่มเรียกเมธอด
ประเภทประเภท = Type.GetType (AssemblyName);
วิธี MethodInfo = type.GetMethod (methodName,
BindingFlags.NonPublic | . BindingFlags.Public | . BindingFlags.Static | .
ถ้า (วิธีการ != null)
-
//พารามิเตอร์ถูกคั่นด้วย ","
string[] args = อาร์กิวเมนต์.แยก(",".ToCharArray());
parameterInfo[] paras = method.GetParameters();
วัตถุ [] อาร์กิวเมนต์ = วัตถุใหม่ [paras.Length];
สำหรับ (int i = 0; i < argument.Length; i++)
-
ถ้า (i <args.Length) {
//เนื่องจากพารามิเตอร์ทั้งหมดที่ส่งผ่านโดย XmlHttp เป็นประเภท String จึงต้องถูกแปลง
//ที่นี่เราแปลงพารามิเตอร์เป็น Int32 เท่านั้น ไม่มีการพิจารณาอื่นใด
อาร์กิวเมนต์ [i] = Convert.ToInt32 (args [i]);
-
-
ค่าวัตถุ = method.Invoke (Activator.CreateInstance (ประเภท, จริง), อาร์กิวเมนต์);
ถ้า (ค่า != null) context.Response.Write(value.ToString());
อื่นบริบทการตอบสนองเขียน ("ข้อผิดพลาด");
-
//สิ้นสุดการประมวลผล
บริบทการตอบสนองสิ้นสุด ();
ยินดีต้อนรับสู่ฟอรัมชุมชน .NET และโต้ตอบกับเจ้าหน้าที่ด้านเทคนิค 2 ล้านคน >> ป้อน
2. รหัส Javascript ของไคลเอ็นต์:
function CallMethod(AssemblyName,MethodName,Argus)
-
var args = "";
สำหรับ(var i=0;i
หาเรื่อง += อาร์กัส[i] + ",";
ถ้า (args.length>0) args = args.substr(0,args.length-1);
var xmlhttp = ใหม่ ActiveXObject('Microsoft.XMLHTTP');
url = "AJAX/AJAX.czhenq?as=" + AssemblyName + "&me=" + MethodName +"&ar="+ args;
xmlhttp.open("POST",url,false);
xmlhttp.send();
การแจ้งเตือน (xmlhttp.responseText);
-
3. มีการนำเฟรมเวิร์ก AJAX แบบธรรมดาไปใช้แล้ว ตอนนี้เขียนโค้ดเพื่อทดสอบ
ใช้ AJAX ของคุณเอง
สร้างเว็บไซต์ใหม่และใช้ HttpHandler ที่คุณเพิ่งเขียน และลงทะเบียน HttpHandler ของคุณใน Web.config ของเว็บไซต์ ซึ่งระบุว่าคำขอเหล่านั้นจะได้รับการประมวลผลโดยใช้ Handler ที่คุณเขียน เนื้อหาต่อไปนี้อธิบาย: คำขอทั้งหมดที่ลงท้ายด้วย "czq" จะได้รับการประมวลผลโดยใช้ "Czhenq.HttpHandlerFactory"
type="Czhenq.HttpHandlerFactory, Czhenq.AJAX"/>
2. เพิ่มหน้าเว็บ คัดลอกสคริปต์ลงในเพจทันที และเพิ่มวิธีการที่คุณต้องการโทร
เพิ่มสตริงส่วนตัว (int i, int j)
-
กลับ TextBox1.Text;
-
3. วางตัวควบคุม HiddenField บนเพจและตั้งชื่อเป็น AssemblyName และเพิ่มโค้ดต่อไปนี้ใน Page_Load:
string assemblyName = Czhenq.AJAX.Class1.Encode(
typeof(_Default).AssemblyQualifiedName);
AssemblyName.Value = AssemblyName;
var assemblyName = document.getElementById("AssemblyName"); var argus = new Array();argus.push("100");argus.push("200");CallMethod(assemblyName,"Add",argus)
โดยสรุป AJAX ไม่ใช่เทคโนโลยีใหม่ มันเป็นเพียงการผสมผสานแบบออร์แกนิกของเทคโนโลยีบางอย่างที่มีอยู่ เราเข้าใจได้ง่ายว่า Ajax เป็นการห่อหุ้ม JavaScript ที่เรียกว่า XmlHttp
สิ่งที่แนบมาคือการใช้งาน Encode และ Dencode:
การเข้ารหัสสตริงสาธารณะแบบคงที่ (ค่าสตริง)
-
ไบต์ [] ไบต์ = ASCIIEncoding.ASCII.GetBytes (ค่า);
กลับ Convert.ToBase64String (ไบต์);
-
Dencode สตริงคงที่สาธารณะ (ค่าสตริง)
-
ไบต์ [] ไบต์ = Convert.FromBase64String (ค่า);
กลับ ASCIIEncoding.ASCII.GetString (ไบต์);
-