ترجمة: فالنس
الوقت: 2007-06-11
النص الأصلي: http://ajax.asp.net/docs/overview/AJAXClientEvents.aspx
نرحب بالجميع لإبداء التعليقات وسأقوم بإجراء التعديلات بشكل فعال!
مقدمة [مقدمة]
يقترح Microsoft Ajax أحداث دورة الحياة من جانب العميل المشابهة لأحداث دورة الحياة من جانب الخادم لصفحات ASP.NET 2.0. تسمح لنا هذه الأحداث من جانب العميل بتخصيص واجهة المستخدم الخاصة بنا لكل من عمليات إعادة النشر التقليدية وعمليات إعادة النشر غير المتزامنة (التحديث الجزئي للصفحة). يمكنهم أيضًا مساعدتك في إدارة البرامج النصية المخصصة واستخدامها طوال دورة حياة الصفحة.
يتم اقتراح هذه الأحداث من جانب العميل في فئة AJAX Libray من Microsoft (يمكننا العثور عليها في فئة AJAX Libray). يتم إنشاء مثيل لهذه الفئات تلقائيًا (إنشاء مثيل لها؟) عند تحميل عنصر تحكم الخادم باستخدام AJAX. توفر هذه الفئات بعض واجهات برمجة التطبيقات حتى نتمكن من ربط الأحداث بمعالجات موفر الأحداث. ومكتبة AJAX مستقلة عن المتصفح، وبالتالي فإن التعليمات البرمجية التي تكتبها ستعمل في جميع المتصفحات المدعومة.
الأحداث الرئيسية هي حدث التحميل لمثيل التطبيق الذي يبدأ الطلب وإعادة النشر غير المتزامنة. عند تشغيل البرنامج النصي أثناء حدث معالج التحميل، يتم تحميل كافة البرامج النصية والمكونات وتكون متاحة. عندما يتم تحديث جزء من الصفحة باستخدام عنصر التحكم UpdatePanel، فإن أهم أحداث العميل هي فئة PageRequestManager. تمكنك هذه الأحداث من جانب العميل من تنفيذ سيناريوهات معينة. تتضمن الأمثلة ما يلي: التراجع عن عمليات إعادة النشر، وتعيين أولوية أعلى لإعادة النشر، وجعل UpdatePanel يتفاعل بشكل أفضل عند التحديث.
هذه الأحداث مفيدة جدًا لنا لإنشاء الصفحات أو كتابة المكونات. إذا كنت مطور ويب، فيمكنك استخدام البرامج النصية المخصصة لتحميل وتفريغ الصفحات.
لمعرفة المزيد حول أحداث دورة الحياة من جانب الخادم، يمكنك الرجوع إلى نظرة عامة على دورة حياة صفحة ASP.NET.
تقترحفئات العميل [فئات العميل]
في مكتبة فئات Microsoft AJAX فئتين رئيسيتين في دورة حياة العميل لصفحات ويب AJAX: فئة التطبيق وفئة PageRequestManager.
يتم إنشاء فئة التطبيق عندما يطلب المتصفح صفحة تحتوي على عنصر تحكم ScriptManager. تشبه فئة التطبيق عنصر تحكم الصفحة من جانب الخادم، كما أنها ترث من فئة التحكم، ولكنها تحتوي على بعض الوظائف الإضافية (مقارنة بالأحداث من جانب الخادم). وبالمثل، يرث التطبيق فئة Sys.COmponent، بالإضافة إلى أنه يوفر أيضًا العديد من الأحداث القابلة للتشغيل أثناء دورة حياة العميل.
إذا كانت الصفحة تحتوي على ScriptManager وواحد أو أكثر من عناصر تحكم UpdatePanel، فيمكن للصفحة تحقيق تأثيرات التحديث الجزئي. في هذه الحالة، يتوفر مثيل لفئة PageRequestManager للمتصفح. تدور أحداث العميل التي يوفرها PageRequestManager حول إعادة النشر غير المتزامنة. لمزيد من التفاصيل حول إنشاء صفحات جزئية، يرجى الرجوع إلى: نظرة عامة على عرض الصفحة الجزئية.
إضافة معالجات لأحداث العميل [إضافة معالج لأحداث العميل]
الآن قم بإضافة الأحداث أو إزالتها باستخدام أساليب add_eventname وreomve_eventname في فئتي التطبيق وPageRequestManager. يوضح المثال التالي كيفية إضافة معالج يسمى MyLoad إلى الحدث init الخاص بكائن التطبيق.
Sys.Application.add_init(MyInit);
وظيفة MyInit (المرسل) {
}
Sys.Appplication.remove_init(MyInit);
هذا المثال يوضح فقط صيغة استخدام طريقتي add_eventname وremove_eventname. مزيد من التفاصيل حول استخدام هذا الحدث متوفرة في موضوع لاحق.
التعامل مع أحداث تحميل وإلغاء تحميل التطبيق [أحداث تحميل وإلغاء تحميل تطبيق التشغيل]
لتشغيل أحداث تحميل وإلغاء تحميل كائن التطبيق، ليست هناك حاجة للربط بشكل صريح بحدث عملية. بدلاً من ذلك، يمكنك إنشاء وظيفة مباشرةً باستخدام الكلمات الرئيسية المحجوزة pageLoad وpageUnload. يوضح المثال التالي كيفية إضافة إجراء إلى حدث تحميل التطبيق.
وظيفة تحميل الصفحة (المرسل، الحجج) {
}
أحداث فئات العملاء الأخرى [فئات العملاء الأخرى]
يصف هذا الموضوع فقط الأحداث التي توفرها فئتي التطبيق وPageRequestManager. تتضمن مكتبة فئات AJAX من Microsoft أيضًا الفئات التالية لإضافة أحداث عناصر DOM ومسحها وإزالتها. تتضمن هذه الفئات:
هناك أسلوب Sys.UI.DomEvent.addHandler أو الاختصار $addHandler
هناك أسلوب Sys.UI.DomEvent.clearHandlers أو الاختصار $clearHandlers
هناك أسلوب Sys.UI.DomEvent.removeHandler أو $
لم تتم مناقشة الأحداث التي توفرها مبادئ DOM في هذا الموضوع
.
أحداث العميل لفئتي التطبيق وPageRequestManager [أحداث العميل لفئتي التطبيق وPageRequestManager]
يسرد الجدول التالي أحداث العميل لفئتي التطبيق وPageRequestManager التي يمكنك استخدامها في صفحات AJAX ASP.NET. وتسلسل الأحداث سنتحدث عنه في موضوع لاحق.
حدث
(اسم الحدث)
وصف
(يصف)
initEvent
[حدث التهيئة]
يقام هذا الحدث بعد تحميل كافة البرامج النصية وقبل إنشاء أي كائنات. إذا كنت تخطط لكتابة مكون (برنامج نصي)، فإن حدث init يوفر نقطة في دورة الحياة لإضافة المكون (برنامج نصي) إلى الصفحة. يمكن استدعاء هذا المكون بواسطة نصوص برمجية أخرى في دورة الحياة. إذا كنت مطور ويب، فمن المستحسن في معظم الحالات استخدام حدث التحميل بدلاً من حدث init.
يتم إنشاء حدث init مرة واحدة فقط عند بدء إنشاء الصفحة. لن تؤدي عمليات التحديث الجزئية اللاحقة للصفحة إلى تشغيل حدث init.
حدث التحميل
[حدث التحميل]
يُقام هذا الحدث بعد تحميل كافة البرامج النصية وبعد إنشاء جميع كائنات البرنامج التي تمت تهيئتها باستخدام $create. سيتم رفع هذا الحدث من خلال جميع عمليات إعادة النشر إلى الخادم، بما في ذلك عمليات إعادة النشر غير المتزامنة.
إذا كنت مطور ويب، فيمكنك إنشاء وظيفة تسمى pageLoad، والتي يتم توفيرها بواسطة حدث التحميل نفسه. يمكن استدعاء عملية pageLoad (المعالج) بعد أي عملية تتم إضافتها إلى حدث التحميل من خلال طريقة add_load.
يتطلب حدث التحميل كائن Sys.ApplicationLoadEventArgs كمعلمة eventsargs. يمكنك استخدام هذه المعلمة لتحديد ما إذا كانت الصفحة تحتاج إلى عرض تحديث جزئي، ويمكنك أيضًا تحديد المكونات التي يجب إنشاؤها بعد تشغيل حدث التحميل الأخير.
تفريغ الحدث
[حدث إلغاء التثبيت]
يتم رفعه قبل تحرير كافة الكائنات وقبل وقوع حدث window.unload الخاص بالمتصفح.
يمكنك التعامل مع حدث التفريغ من خلال وظيفة تسمى pageUnload التي يوفرها النظام نفسه. يتم استدعاء حدث pageUnload عندما يتم إلغاء تحميل الصفحة في المتصفح. خلال هذا الحدث، يجب علينا تحرير جميع الموارد التي تشغلها التعليمات البرمجية.
حدث تم تغييره
[حدث تغيير السمة]
يُثار عندما تتغير خصائص أحد المكونات. يرث كائن التطبيق هذا الحدث من فئة المكون. يتم رفع هذا الحدث فقط عندما يستدعي المطور الأسلوب Sys.Component.raisePropertyChange عند تعيين قيمة خاصية.
راجع تعريف خصائص المكونات المخصصة ورفع أحداث PropertyChanged لمزيد من المعلومات.
تتطلب أحداث تغيير الخاصية كائن Sys.applicationLoadEventArgs كمعلمة eventsargs.
حدث التخلص
[حدث الإصدار]
يتم رفع هذا الحدث عند إصدار مثيل التطبيق. يرث كائن التطبيق هذا الحدث من فئة المكون.
حدث تهيئة الطلب
[حدث طلب التهيئة]
يحدث هذا الحدث في بداية طلب غير متزامن. يمكنك استخدام هذا الحدث لإلغاء إعادة النشر التقليدية، على سبيل المثال، للسماح لإعادة النشر غير المتزامنة بأن تكون لها الأسبقية.
يتطلب حدث طلب التهيئة معلمة eventsargs التي يوفرها كائن Sys.WebForms.InitializeRequestEventArgs. يوفر هذا الكائن عناصر مفيدة للكائنات التي تسبب عمليات إعادة النشر والطلبات الأساسية. يكشف هذا الحدث أيضًا عن سمة الإلغاء. إذا قمت بتعيين الإلغاء على صحيح، فسيتم إلغاء إعادة النشر الجديدة.
بدء طلب الحدث
[بدء حدث الطلب]
يتم رفع هذا الحدث قبل بدء إعادة النشر غير المتزامنة إلى الخادم. إذا كانت عملية إعادة النشر موجودة بالفعل، فسيتم إيقافها (باستخدام الأسلوب abortPostBack). يمكنك استخدام هذا الحدث لتعيين رؤوس الطلب أو عرض مطالبة (رسوم متحركة) مثيرة للاهتمام على الصفحة للإشارة إلى أن الطلب قيد التقدم.
يتطلب هذا الحدث كائن Sys.WebForms.BeginRequestEventArgs كمعلمة eventsargs. يوفر هذا الكائن عناصر مفيدة للتسبب في عمليات إعادة النشر وكائنات الطلب الأساسية.
حدث تحميل الصفحة
[حدث تحميل الصفحة]
يتم رفعه قبل تحديث أي محتوى على الصفحة عندما يتلقى الخادم إعادة نشر غير متزامنة. يمكنك استخدام هذا الحدث لتوفير تأثير انتقال مخصص للمحتوى الذي يحتاج إلى التحديث.
يتطلب هذا الحدث كائن Sys.WebForms.PageLoadingEventArgs كمعلمة eventsargs. يوفر هذا الكائن معلومات مفيدة حول اللوحات التي سيتم حذفها وتحديثها كنتيجة لأحدث إعادة نشر غير متزامنة.
حدث تم تحميله
[حدث اكتمال تحميل الصفحة]
يتم رفعه بعد تحديث كل محتوى الصفحة من خلال نتيجة إعادة النشر المتزامنة أو غير المتزامنة. أثناء إعادة النشر المتزامن، يمكن إنشاء اللوحات فقط، ولكن أثناء إعادة النشر غير المتزامنة، يمكن إنشاء اللوحات وتحديثها. يمكنك استخدام هذا الحدث لإدارة تأثير التغيير المخصص للمحتوى الذي يحتاج إلى التحديث.
يتطلب هذا الحدث كائن Sys.WebForms.PageLoadedEventArgs كمعلمة eventsargs. يوفر هذا الكائن معلومات مفيدة حول اللوحات التي تم تحديثها وإنشاؤها أثناء عملية إعادة النشر الأخيرة.
حدث الطلب النهائي
[حدث طلب النهاية]
يتم رفعه بعد اكتمال عملية إعادة النشر غير المتزامنة استجابةً وتحديث الصفحة، أو بعد حدوث خطأ أثناء الطلب. في حالة حدوث خطأ، لن يتم تحديث الصفحة. استخدم هذا الحدث لتقديم رسالة خطأ مخصصة للزائرين أو تسجيل الدخول في سجل الأخطاء.
يتطلب هذا الحدث كائن Sys.WebForms.EndRequestEventArgs كمعلمة eventsargs. يوفر هذا الكائن بعض المعلومات المفيدة حول الخطأ الذي تم ظهوره وما إذا كان قد تمت معالجة الخطأ أم لا. كما يوفر المعلومات المتاحة حول الكائن المقابل.
مثال ترتيب الأحداث [مثال ترتيب الأحداث]
يوضح المثال التالي كيف سيتم رفع الأحداث من جانب العميل على صفحة تحتوي على عنصري تحكم UpdatePanel متداخلين. يرجى ملاحظة الفرق بين النقر على الزر الموجود في اللوحة الأصلية والزر الموجود في اللوحة المدمجة. سيؤدي الزر الموجود في اللوحة الأصلية إلى تحديث اللوحة الأصلية، وسيتم حذف اللوحة المضمنة فيها وإعادة إنشائها. لا تؤدي الأزرار ذات اللوحات المضمنة إلا إلى إجراء تحديثات على اللوحة المضمنة.
رمز الصفحة:
1<%@ لغة الصفحة='C#' %>
2
3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4 " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
5
6<script runat="server">
7
8</script>
9
10<html xmlns=" http://www.w3.org/1999/xhtml " >
11 <رئيس التشغيل = "الخادم">
12 <title>مثال لحدث العميل</title>
13 <نمط النوع = "نص/css">
14 #OuterPanel { العرض: 600 بكسل الارتفاع: 200 بكسل;
15 #NestedPanel { العرض: 596 بكسل الارتفاع: 60 بكسل؛ الحدود: 2 بكسل أخضر خالص؛
16 الهامش الأيسر: 5 بكسل؛ الهامش الأيمن: 5 بكسل؛}
17</نمط>
18</الرأس>
19<الجسم>
20 <form id="form1" runat="server">
21 <ديف>
22 <asp:ScriptManager ID="ScriptManager1" runat="server">
23 <مخطوطات>
24 <asp:ScriptReference Path="ClientEventTest.js" />
25 </مخطوطات>
26 </asp:ScriptManager>
27 <asp:UpdatePanel ID="OuterPanel" UpdateMode="Conditional" runat="server">
28 <قالب المحتوى>
29 إعادة النشر من داخل اللوحة الخارجية واللوحة الداخلية
30 إعادة نشر غير متزامنة PRM = Sys.WebForms.PageRequestManager APP = Sys.Application.
31
32 <br /><br />
33 <asp:Button ID = "OPButton1" Text = "زر اللوحة الخارجية" runat = "الخادم" />
34 آخر تحديث بتاريخ
35 <%= DateTime.Now.ToString() %>
36 <br /><br />
37
38 <asp:UpdatePanel ID="NestedPanel" UpdateMode="Conditional" runat="server">
39 <قالب المحتوى>
40 <asp:Button ID="NPButton1" Text="Nested Panel 1 Button" runat="server" />
41 آخر تحديث بتاريخ
42 <%= DateTime.Now.ToString() %>
43 <br />
44 </ContentTemplate>
45 </asp:UpdatePanel>
46 </ContentTemplate>
47 </asp:UpdatePanel>
48
49 <نوع الإدخال = "زر" onclick = "مسح ()؛" القيمة = "مسح" />
50
51 <asp:Button ID="FullPostBack" runat="server" Text="Full Postback" />
52 <a href=" http://www.microsoft.com">اختبار إلغاء تحميل النافذة</a>
53<br />
54 <span id="ClientEvents"></span>
55 </div>
56 </النموذج>
57</الجسم>
58</html>
59
كود البرنامج النصي:
1//ربط معالجات أحداث التطبيق.
2var app = Sys.Application;
3app.add_load(ApplicationLoad);
4app.add_init(ApplicationInit);
5app.add_dispose(ApplicationDispose);
6app.add_unload(ApplicationUnload);
7
8
9//معالجات أحداث التطبيق لمطوري المكونات.
10 وظيفة ApplicationInit (المرسل) {
11 var prm = Sys.WebForms.PageRequestManager.getInstance();
12 إذا (!prm.get_isInAsyncPostBack())
13 {
14 prm.add_initializeRequest(InitializeRequest);
15 prm.add_beginRequest(BeginRequest);
16 prm.add_pageLoading(PageLoading);
17 prm.add_pageLoaded(PageLoaded);
18 prm.add_endRequest(EndRequest);
19}
20 $get('ClientEvents').innerHTML += "APP:: Application init.<br/>";
واحد وعشرون }
22 وظيفة تحميل التطبيق (المرسل، الحجج) {
23 $get('ClientEvents').innerHTML += "APP:: تحميل التطبيق. ";
24 $get('ClientEvents').innerHTML += "(isPartialLoad = " + args.get_isPartialLoad() + ")<br/>";
25}
26 وظيفة تحميل التطبيق (المرسل) {
27 تنبيه('APP::إلغاء تحميل التطبيق.');
28}
29 وظيفة تطبيق التخلص (المرسل) {
30 $get('ClientEvents').innerHTML += "APP:: التخلص من التطبيق.<br/>";
31
32}
33//معالجات أحداث التطبيق لمطوري الصفحات.
34 صفحة تحميل وظيفة () {
35 $get('ClientEvents').innerHTML += "PAGE:: Load.<br/>";
36}
37
38 صفحة وظيفةUnload() {
39 تنبيه('الصفحة:: إلغاء تحميل الصفحة.');
40}
41
42// معالجات الأحداث PageRequestManager.
43وظيفة طلب التهيئة(sender, args) {
44 $get('ClientEvents').innerHTML += "<hr/>";
45 $get('ClientEvents').innerHTML += "PRM:: تهيئة طلب غير متزامن.<br/>";
46}
47وظيفة BeginRequest(sender, args) {
48 $get('ClientEvents').innerHTML += "PRM:: بدء معالجة طلب المزامنة.<br/>";
49}
50 وظيفة تحميل الصفحة (المرسل، الحجج) {
51 $get('ClientEvents').innerHTML += "PRM:: تحميل نتائج الطلب غير المتزامن.<br/>";
52 var UpdatePanels = printArray("PanelsUpdating", args.get_panelsUpdating());
53 vardeletedPanels = printArray("PanelsDeleting", args.get_panelsDeleting());
54
55 var message = "-->" + uploadPanels + "<br/>-->" +deletedPanels + "<br/>";
56
57 document.getElementById("ClientEvents").innerHTML += message;
58}
59وظيفة PageLoaded(sender, args) {
60 $get('ClientEvents').innerHTML += "PRM:: تم الانتهاء من تحميل نتائج الطلب غير المتزامن.<br/>";
61 var UpdatePanels = printArray("PanelsUpdated", args.get_panelsUpdated());
62 var createPanels = printArray("PaneslCreated", args.get_panelsCreated());
63
64 var message = "-->" + UpdatePanels + "<br/>-->" + createPanels + "<br/>";
65
66 document.getElementById("ClientEvents").innerHTML += message;
67}
68وظيفة EndRequest(sender, args) {
69 $get('ClientEvents').innerHTML += "PRM:: نهاية طلب عدم المزامنة.<br/>";
70}
71
72//وظائف المساعد.
73functionClear()
74 {
75 $get('ClientEvents').innerHTML = "";
76}
77 وظيفة printArray (اسم، وصول)
78{
79 لوحة var = name + '=' + arr.length;
80 إذا(arr. length > 0)
81 {
82 لوحة += "(";
83 ل(var i = 0;i < arr.length; i++)
84 {
85 لوحة += arr[i].id + ',';
86}
87 لوحة = Panels.substring(0, Panels.length - 1);
88 لوحة += ")";
89 }
90 لوحة إرجاع؛
91}
92
تأثير التشغيل عرض الكود
ترتيب الأحداث للسيناريوهات الشائعة [ترتيب الحدث العام]
لا يزال ترتيب تشغيل الحدث يعتمد على عناصر التحكم المستخدمة في الصفحة ونوع الطلب الذي يحدث (طلب التهيئة أو إعادة النشر التقليدية أو إعادة النشر غير المتزامنة). يصف هذا القسم تسلسل طلب الحدث لعدة سيناريوهات شائعة.
الطلب الأولي [طلب التهيئة]
أثناء طلب تهيئة الصفحة، يتم تشغيل عدد صغير من أحداث العميل. افترض أن ما يلي هو سيناريو طلب التهيئة.
· تتضمن الصفحة عنصر تحكم ScriptManager، وتكون خصائص عنصر التحكم SupportsPartialRendering وEnablePartialRendering صحيحة.
· الطلب من نوع GET؛
· يمكن للخادم الاستجابة بشكل طبيعي.
فيما يلي التسلسل الذي تحدث فيه الأحداث من جانب العميل:
1. يحدث طلب تهيئة للخادم.
2. يتلقى العميل الرد.
3. يقوم مثيل التطبيق بتشغيل حدث init.
4. يقوم مثيل التطبيق بتشغيل حدث التحميل.
يحدث حدث التهيئة مرة واحدة فقط خلال دورة حياة الصفحة بالكامل عندما يتم إنشاء مثيل للتطبيق. لن يتم رفعه من خلال عمليات إعادة النشر غير المتزامنة اللاحقة. أثناء الطلب الأولي (لاحظ الطلب)، لم يتم عرض أي أحداث PageRequestManager.
إعادة النشر غير المتزامنة [إعادة النشر غير المتزامنة]
ترسل عملية إعادة النشر غير المتزامنة بعض بيانات الصفحة إلى الخادم، وتتلقى استجابة من جانب الخادم، ثم تقوم بتحديث جزء من الصفحة. افترض سيناريو إعادة النشر غير المتزامن التالي:
· تتضمن الصفحة عنصر تحكم ScriptManager، وتكون خصائص عنصر التحكم SupportsPartialRendering وEnablePartialRendering صحيحة.
· يوجد عنصر تحكم UpdatePanel على الصفحة، ويتم تغيير قيمة خاصية ChildrenAsTriggers لعنصر التحكم إلى true.
· يوجد زر داخل UpdatePanel لتفعيل إعادة النشر غير المتزامنة.
· النجاح في الحصول على استجابة من جانب الخادم.
فيما يلي التسلسل الذي تحدث فيه الأحداث من جانب العميل:
1. عند النقر فوق الزر الموجود في عنصر التحكم UpdatePanel، يحدث إعادة نشر غير متزامنة.
2. قام مثيل PageRequestManager بتشغيل حدث التهيئة.
3. قام مثيل PageRequestManager بتشغيل حدث beginRequest.
4. يتم إرسال الطلب إلى الخادم.
5. يتلقى العميل الرد.
6. قام مثيل PageRequestManager بتشغيل حدث pageLoading.
7. قام مثيل PageRequestManager بتشغيل الحدث pageLoaded.
8. قام مثيل التطبيق بتشغيل حدث التحميل.
9. قام مثيل PageRequestManager بتشغيل حدث endRequest.
يرجى ملاحظة أن حدث تحميل التطبيق يقع بعد حدث pageLoaded الخاص بـ PageRequestManager وقبل حدث endRequest.
عمليات إعادة النشر غير المتزامنة المتعددة [عمليات إعادة النشر غير المتزامنة المتعددة]
عند تشغيل طلب سابق على الخادم أو المستعرض ويرسل المستخدم طلبًا جديدًا، تحدث عمليات إعادة نشر غير متزامنة متعددة. افترض أن السيناريو التالي يصف حالة عمليات إعادة النشر غير المتزامنة المتعددة.
· تتضمن الصفحة عنصر تحكم ScriptManager، وتكون خصائص عنصر التحكم SupportsPartialRendering وEnablePartialRendering صحيحة.
· تحتوي الصفحة على عنصر تحكم UpdatePanel.
· في UpdatePanel، يتم النقر مرتين على زر التحكم الذي يؤدي إلى إعادة النشر غير المتزامنة. تحدث النقرة الثانية أثناء قيام الخادم بمعالجة الطلب الذي بدأه النقرة الأولى.
· تم الحصول على الرد على الطلب الأول المرتجع من الخادم.
فيما يلي التسلسل الذي تحدث فيه الأحداث من جانب العميل:
1. يؤدي النقر فوق الزر الموجود في UpdatePanel إلى تشغيل إعادة النشر غير المتزامنة.
2. قام مثيل PageRequestManager بتشغيل حدث التهيئة.
3. قام مثيل PageRequestManager بتشغيل حدث beginRequest.
4. يتم إرسال الطلب إلى الخادم.
5. يتلقى العميل الرد.
6. يتم النقر على الزر مرة أخرى، مما يؤدي إلى إعادة النشر غير المتزامنة الثانية.
7. يقوم مثيل PageRequestManager بتشغيل حدث التهيئة للنقرة الثانية.
8. يقوم مثيل PageRequestManager بتشغيل حدث beginRequest للنقرة الثانية.
9. قام طلب النقر الثاني الخاص بـ Northern Expedition بفحص الخادم.
10. يتلقى العميل رد النقرة الثانية.
11. قام مثيل PageRequestManager بتشغيل حدث pageLoading.
12. قام مثيل PageRequestManager بتشغيل الحدث pageLoaded.
13. قام مثيل التطبيق بتشغيل حدث التحميل.
14. قام مثيل PageRequestManager بتشغيل حدث endRequest.
سلوك إعادة النشر غير المتزامن الافتراضي هو أن أحدث عملية إعادة نشر غير متزامنة لها الأسبقية. في حالة حدوث عمليتي إعادة نشر غير متزامنتين بالتسلسل، ولا تزال عملية إعادة النشر غير المتزامنة الأولى قيد المعالجة بواسطة المستعرض، فسيتم إلغاء عملية إعادة النشر غير المتزامنة الأولى. إذا تم إرسال إعادة النشر الأولى إلى الخادم، فلن يقوم الخادم بإرجاع الطلب الأول حتى وصول الطلب الثاني. لمزيد من التفاصيل حول كيفية تعيين الأولوية لإعادة النشر غير المتزامنة، يرجى الرجوع إلى إعطاء الأولوية لإعادة النشر غير المتزامنة المحددة.
التصفح بعيدًا عن الصفحة [تصفح الصفحات الأخرى]
عندما يصل المستخدم إلى صفحات أخرى من صفحة واحدة، سيتم عرض الصفحة الحالية منها. قم بإلغاء تحميل المتصفح، حتى تتمكن من تشغيل حدث التفريغ لتحرير الموارد. لنفترض أن هذا السيناريو تمت محاكاته أدناه.
· تتضمن الصفحة عنصر تحكم ScriptManager، وتكون خصائص عنصر التحكم SupportsPartialRendering وEnablePartialRendering صحيحة.
· الصفحة المستهدفة موجودة.
فيما يلي التسلسل الذي تحدث فيه الأحداث من جانب العميل:
1. بدء طلب لصفحة جديدة.
2. يحصل المتصفح على استجابة تطلب صفحة جديدة.
3. يقوم مثيل التطبيق بتشغيل حدث التفريغ.
4. يتم عرض صفحة جديدة.
إذا حدث خطأ عند طلب صفحة جديدة، فسيستمر ظهور حدث إلغاء التحميل، ولكن لن يتم عرض الصفحة الجديدة.
【زيادة】