يتطلب رد الاتصال بدون تحديث الذي تدعمه تقنية AJAX كتابة كمية كبيرة من تعليمات JavaScript البرمجية أو استخدام بعض أطر عمل AJAX في التقنية الأصلية، مما يقلل بشكل كبير من كفاءة التطوير وقابلية الصيانة. في الواقع، يوفر ASP.NET2.0 بالفعل مثل هذه الواجهة، وهي ICallbackEventHandler.
يوجد بالفعل العديد من المقالات حول ICallbackEventHandler على الإنترنت، وهذه المقالة تضيف المزيد إلى القصة.
ICallbackEventHandler موجود في System.Web.UI فلنجربه بمثال بسيط جدًا.
الخطوة الأولى هي إنشاء نافذة ويب جديدة في VS2005.
الخطوة الثانية هي وضع جزء من كود HTML (أدناه) في ASPX:
1<الجسم>
2 <form id="form1" runat="server">
3 <ديف>
4 <button onclick="CallServer()">CallServer</button>
5 </د>
6 </النموذج>
7</body>
الخطوة الثالثة هي وضع برنامج جافا سكريبت في <HEAD></HEAD>:
1 <نوع النص = "نص/جافا سكريبت">
2 وظيفة CallServer ()
3 {
4 فار المنتج = "اختبار";
5 <%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
6}
7
8 وظيفة ريسيفيرفيرداتا (rValue)
9 {
10 تنبيه (rValue)؛
11 }
12 </script>
الخطوة الرابعة هي وراثة واجهة ICallbackEventHandler في كود CS الخلفي لـ ASPX وتنفيذ الطريقتين في الواجهة:
ICallbackEventHandler.GetCallbackResult()
و
ICallbackEventHandler.RaiseCallbackEvent(string eventsArgument)
الخطوة الخامسة هي إضافة متغير CallBackValue وتعديل طريقتي الواجهة على النحو التالي:
1 سلسلة خاصة CallBackValue = string.Empty;
2
3 سلسلة ICallbackEventHandler.GetCallbackResult()
4 {
5 return CallBackValue + ",ok";
6}
7
8 باطلة ICallbackEventHandler.RaiseCallbackEvent(سلسلة الأحداث)
9 {
10 this.CallBackValue = eventsArgument;
11 }
12
الخطوة السادسة هي التشغيل. سيظهر زر على الواجهة. بعد النقر، سيتم نقل السلسلة "اختبار" إلى الخلفية. وسيضيف رمز C# للخلفية "، OK" إلى السلسلة ويعيدها إلى JavaScript الخاص بالعميل الكود وعرضه.
باتباع الخطوات الست المذكورة أعلاه، يمكنك تحقيق رد اتصال بدون تحديث. الآن، دعونا نحلل بعض أجزاء التعليمات البرمجية.
دعونا نلقي نظرة أولاً على كود JavaScript في الخطوة الثالثة. هناك رد اتصال في طريقة CallServer () وهو:
<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
تحدد المعلمة الثانية من بين المعلمات الأربع أن متغير السلسلة في منتج JavaScript يتم إرجاعه إلى الخلفية، وتحدد المعلمة الثالثة طريقة JavaScript ReceiverServerData(string Value) التي تتلقى معلومات الإرجاع عند العودة من الخلفية.
في الخطوة الخامسة، هناك طريقتان في الخلفية. تُستخدم إحداهما، ICallbackEventHandler.RaiseCallbackEvent(string eventsArgument)، لتلقي متغير السلسلة الذي تم تمريره في JavaScript الأمامية وتعيينه للمتغير الداخلي this.CallBackValue. سوف يقوم ICallbackEventHandler.GetCallbackResult() بتغيير المتغير الداخلي this.CallBackValue إلى أسلوب JavaScript الأمامي ReceiverServerData (قيمة السلسلة).
تسلسل الاستدعاء هو: (الواجهة الأمامية)CallServer() --> (الواجهة الخلفية)ICallbackEventHandler.RaiseCallbackEvent(string eventsArgument) --> (الواجهة الخلفية)ICallbackEventHandler.GetCallbackResult() --> (الواجهة الأمامية)ReceiveServerData(string Value).
عملية الاتصال بأكملها بسيطة للغاية، والخطوة الأكثر أهمية هي الخطوة الثالثة
<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
بالنسبة لهذه الطريقة، فيما يلي بعض المعلومات الموجودة على الإنترنت، يمكنك إلقاء نظرة عليها.
يؤدي GetCallbackEventReference إلى إعادة استخدام طريقة العميل في نهاية طلب العميل. كما أنه يتيح لـ CallBackManager تحديد طريقة رد الاتصال التي سيتم إنشاؤها. الطريقة المحملة بشكل زائد المستخدمة في هذا المثال هي:
السلسلة العامة GetCallbackEventReference(
هدف السلسلة، وسيطة السلسلة،
رد اتصال عميل السلسلة، سياق السلسلة،
سلسلة العميلErrorCallback)
الجدول 1. أوصاف المعلمات للأسلوب GetCallBackEventReference.
وصف المعلمات معرف الهدف للصفحة التي تتم فيها معالجة استدعاء رد الاتصال. لمزيد من المعلومات، راجع الخيارات المحملة بشكل زائد المتوفرة في القسم المباشر التالي. في نموذجنا، "هذه" هي قيمة الوسيطة، حيث تتم معالجة رد الاتصال في نفس الصفحة هو تعريف المعلمة المستخدم لإرسال القيمة إلى الخادم. يتم استلام هذه القيمة بواسطة المعلمة "eventArgument" في نهاية الخادم باستخدام حدث RaiseCallbackEvent. يصبح "arg" هو اسم المعلمة الأول في العينة الخاصة بنا اسم أسلوب رد الاتصال الذي يتم استدعاؤه بعد نجاح استدعاء الخادم "CallBackHandler" هو اسم الأسلوب الذي يتعامل مع معلمة رد الاتصال المرتبطة بـ "الوسيطة" من العميل تحديد سياق المكالمة. سوف تفهم ذلك بشكل أفضل من نموذج التنفيذ. في النموذج "ctx" هو مجرد تعريف معلمة آخر يتم تمريره من اسم العميل ClientErrorCallback الذي يتم استدعاؤه من CallBackManager في حالة وجود أي أخطاء.
السلسلة التي تم إرجاعها من هذه الطريقة هي:
__doCallback('__Page',arg,CallBackHandler,ctx, ErrorCallBack)
هناك طريقة أخرى محمّلة بشكل زائد وهي:
السلسلة العامة GetCallbackEventReference(
التحكم في التحكم، وسيطة السلسلة،
رد اتصال عميل السلسلة، سياق السلسلة)
سلسلة عامة GetCallbackEventReference(
التحكم في التحكم، وسيطة السلسلة،
رد اتصال عميل السلسلة، سياق السلسلة،
سلسلة العميلErrorCallback)