-
يمكنك استخدام عنصر التحكم البديل لإنشاء مناطق على صفحة ويب يمكن تحديثها ديناميكيًا ودمجها لاحقًا في الصفحات المخزنة مؤقتًا.
1. الخطة
استخدم عنصر التحكم البديل لتحديد أجزاء صفحة الويب التي تريد تخزين مخرجات المحتوى الديناميكي فيها مؤقتًا. بالنسبة للصفحات التي يتم فيها تخزين معظم المحتوى مؤقتًا، يوفر عنصر التحكم الاستبدال حلاً مبسطًا للتخزين المؤقت الجزئي للصفحة. يمكنك تخزين مخرجات الصفحة بأكملها مؤقتًا، ثم استخدام عنصر التحكم البديل لتحديد أجزاء الصفحة التي لم يتم تخزينها مؤقتًا. يتم تنفيذ منطقة ذاكرة التخزين المؤقت مرة واحدة فقط وسيتم قراءتها من ذاكرة التخزين المؤقت حتى تنتهي صلاحية إدخال ذاكرة التخزين المؤقت أو يتم مسحها. يتم تنفيذ المناطق الديناميكية في كل مرة يتم فيها طلب الصفحة. يعمل نموذج التخزين المؤقت هذا على تبسيط عملية الترميز لصفحات الويب التي يكون محتواها ثابتًا في الغالب لأنه لا يتعين عليك تغليف هذا المحتوى الثابت في عنصر تحكم مستخدم الويب لوضعه في ذاكرة التخزين المؤقت. على سبيل المثال، يعد نموذج التخزين المؤقت هذا مفيدًا لصفحات الويب التي تحتوي على محتوى ثابت (مثل القصص الإخبارية) وعنصر تحكم AdRotator الذي يعرض الإعلانات. لا تتغير القصص الإخبارية كثيرًا، مما يعني إمكانية تخزينها مؤقتًا. قد ترغب في عرض إعلان جديد في كل مرة يطلب فيها المستخدم الصفحة. يدعم عنصر التحكم AdRotator مباشرةً الاستبدال بعد التخزين المؤقت، والذي يعرض إعلانًا جديدًا عند كل إعادة نشر لصفحة الويب بغض النظر عما إذا كانت صفحة الويب مخزنة مؤقتًا أم لا.
2. الخلفية
عندما تقوم بتخزين صفحة ويب ASP.NET مؤقتًا، بشكل افتراضي، يتم تخزين كافة المخرجات من الصفحة مؤقتًا. عند الطلب الأول، سيتم تشغيل الصفحة وسيتم تخزين مخرجاتها مؤقتًا. بالنسبة للطلبات اللاحقة، سيتم ذلك من خلال التخزين المؤقت ولن يتم تشغيل التعليمات البرمجية الموجودة على تلك الصفحة.
في بعض الحالات، قد لا ترغب في تخزين صفحة ويب ASP.NET في ذاكرة التخزين المؤقت فحسب، بل قد ترغب أيضًا في تحديث أجزاء محددة من الصفحة في كل مرة يتم فيها طلب الصفحة. على سبيل المثال، قد ترغب في تخزين جزء كبير من الصفحة مؤقتًا، ولكنك تحتاج إلى تحديث المعلومات الحساسة للغاية للوقت على الصفحة ديناميكيًا.
يمكنك استخدام عنصر التحكم البديل لإدراج محتوى ديناميكي في الصفحات المخزنة مؤقتًا. لا يعرض عنصر التحكم الاستبدال أي علامات. لذلك، تحتاج إلى ربط عنصر التحكم بطريقة موجودة في صفحة الويب أو عنصر تحكم المستخدم الأصل. تحتاج إلى إنشاء طرق ثابتة تقوم بإرجاع المعلومات المراد إدراجها في صفحة الويب. يجب أن تستوفي الأساليب التي تستدعيها ضوابط الاستبدال المعايير التالية:
· يجب أن تكون الطريقة ثابتة (مشتركة في Visual Basic).
· يجب قبول المعلمات من النوع HttpContext.
· يجب إرجاع قيمة من النوع سلسلة.
ليس لعنصر التحكم الاستبدال إمكانية الوصول إلى عناصر التحكم الأخرى الموجودة على صفحة الويب، مما يعني أنه لا يمكنك فحص أو تغيير قيم عناصر التحكم الأخرى. ومع ذلك، يمكن للتعليمة البرمجية الوصول إلى سياق الصفحة الحالية باستخدام المعلمات التي تم تمريرها إليها.
عند تشغيل الصفحة، يستدعي عنصر التحكم الاستبدال هذا الأسلوب ثم يستبدل عناصر التحكم الاستبدال الموجودة على الصفحة بالقيمة المرجعة من الأسلوب.
مثال التعليمات البرمجية
يوضح المثال التالي كيفية استخدام عنصر التحكم البديل لإنشاء محتوى قابل للتحديث ديناميكيًا على صفحة مخبأة. تقوم التعليمات البرمجية الموجودة في حدث التحميل الخاص بالصفحة بتحديث عنصر تحكم التسمية بالوقت الحالي. نظرًا لأنه تم تعيين مدة ذاكرة التخزين المؤقت للصفحة على 60 ثانية، فإن نص عنصر تحكم التسمية لا يتغير، حتى إذا تم طلب الصفحة عدة مرات خلال فترة 60 ثانية. يستدعي عنصر التحكم الاستبدال الموجود على الصفحة الأسلوب الثابت GetTime، الذي يقوم بإرجاع الوقت الحالي كسلسلة. في كل مرة يتم فيها تحديث صفحة الويب، يتم تحديث القيمة التي يمثلها عنصر التحكم الاستبدال.
<%@ لغة الصفحة = "C#" %>
<%@ OutputCache Duration=60 VaryByParam="None" %>
<script runat="server">
باطلة Page_Load ()
{
Label1.Text = DateTime.Now.ToString();
}
سلسلة GetTime العامة الثابتة (سياق HttpContext)
{
إرجاع DateTime.Now.ToString();
}
</script>
<أتش تي أم أل>
<head runat="server"></head>
<الجسم>
<معرف النموذج = "form1" runat = "الخادم">
<ديف>
<ص>
<asp:Label runat = "server" ID = "Label1" />
</ص>
<ص>
<asp:تشغيل الاستبدال = "الخادم"
المعرف = "الاستبدال1"
اسم الأسلوب = "GetTime" />
</ص>
<ص>
<asp:Button runat = "server" ID = "Button1" Text = "إرسال"/>
</ص>
</div>
</النموذج>
</الجسم>
</html>
3. فئة الاستبدال
استخدم عنصر التحكم البديل لتحديد جزء صفحة الويب الناتجة المخزنة مؤقتًا والتي تريد استبدال عنصر التحكم بمحتوى ديناميكي. يوفر عنصر التحكم الاستبدال حلاً مبسطًا للتخزين المؤقت للصفحات الجزئية للصفحات التي سيتم تخزين معظم المحتوى فيها مؤقتًا. يمكنك إخراج الصفحة بأكملها في ذاكرة التخزين المؤقت ثم استخدام عنصر التحكم البديل لتحديد أجزاء الصفحة المعفاة من التخزين المؤقت. يتم تنفيذ المناطق التي تحتاج إلى التخزين المؤقت مرة واحدة فقط ثم يتم قراءتها من ذاكرة التخزين المؤقت حتى تنتهي صلاحية عنصر ذاكرة التخزين المؤقت أو يتم مسحه. يتم تنفيذ المناطق الديناميكية في كل مرة يتم فيها طلب الصفحة. يعمل نموذج التخزين المؤقت هذا على تبسيط التعليمات البرمجية للصفحات ذات المحتوى الثابت بشكل أساسي لأنه لا يلزم تغليف هذه الأجزاء للتخزين المؤقت في عناصر تحكم مستخدم الويب. على سبيل المثال، يكون نموذج التخزين المؤقت هذا مفيدًا إذا كانت الصفحة تحتوي على محتوى ثابت (مثل مقالة إخبارية) وعنصر تحكم AdRotator الذي يعرض الإعلانات. لا تتغير المقالات الإخبارية، مما يعني إمكانية تخزينها مؤقتًا. ومع ذلك، فأنت تريد عرض إعلان جديد في كل مرة يطلب فيها المستخدم الصفحة. يدعم عنصر التحكم AdRotator مباشرةً الاستبدال بعد التخزين المؤقت، والذي يعرض إعلانًا جديدًا عند إعادة نشر الصفحة مرة أخرى، بغض النظر عما إذا كانت الصفحة مخزنة مؤقتًا أم لا.
ملاحظة: يمكن وضع عنصر التحكم البديل في عنصر تحكم المستخدم الموجود في صفحة ذاكرة التخزين المؤقت. ومع ذلك، لا يمكنك وضع عنصر تحكم بديل ضمن عنصر تحكم مستخدم ذاكرة التخزين المؤقت للإخراج.
عند تنفيذ عنصر التحكم الاستبدال، يتم استدعاء الأسلوب الذي يقوم بإرجاع سلسلة. السلسلة التي يتم إرجاعها بهذه الطريقة هي المحتوى الذي سيتم عرضه في موقع عنصر التحكم الاستبدال على الصفحة. استخدم الخاصية MethodName لتحديد اسم أسلوب رد الاتصال الذي سيتم استدعاؤه عند تنفيذ عنصر التحكم الاستبدال. يجب أن تكون طريقة رد الاتصال المحددة طريقة ثابتة لعنصر تحكم الصفحة أو المستخدم الذي يحتوي على عنصر تحكم الاستبدال. يجب أن يتطابق توقيع أسلوب رد الاتصال مع توقيع مفوض HttpResponseSubstitutionCallback الذي يقبل معلمة HttpContext ويقوم بإرجاع سلسلة.
لتشغيل ذاكرة التخزين المؤقت لمخرجات الصفحة، يمكنك استخدام التوجيه @OutputCache، أو فئة HttpCachePolicy، أو خاصية Cache.
هناك طريقة أخرى لاستخدام عنصر التحكم الاستبدال وهي استخدام مفوض HttpResponseSubstitutionCallback لتنفيذ سلوك استبدال ذاكرة التخزين المؤقت. بالإضافة إلى ذلك، يمكن تنفيذ سلوك استبدال ذاكرة التخزين المؤقت على عناصر التحكم التي تدعم وظيفة استبدال ذاكرة التخزين المؤقت بشكل مباشر، مثل عنصر التحكم AdRotator.
مثال
يوضح مثال التعليمات البرمجية التالي كيفية إضافة عنصر تحكم بديل بشكل تعريفي إلى صفحة ويب لذاكرة التخزين المؤقت للمخرجات. عند تحميل الصفحة، يظهر للمستخدم التاريخ والوقت الحاليين في علامة تبويب. يتم تخزين هذه المنطقة من الصفحة مؤقتًا وتحديثها كل 60 ثانية. عند تنفيذ عنصر التحكم الاستبدال، يتم استدعاء الأسلوب GetCurrentDateTime. سيتم عرض السلسلة التي تم إرجاعها بواسطة GetCurrentDateTime للمستخدم. لا يتم تخزين هذا الجزء من الصفحة مؤقتًا ولا يتم تحديثه في كل مرة يتم فيها تحديث الصفحة.
<%@ مدة OutputCache = "60"varibyparam = "none" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<script runat="server" language="C#">
باطلة Page_Load (مرسل الكائن، System.EventArgs e)
{
// عرض التاريخ والوقت الحاليين في الملصق.
// ينطبق التخزين المؤقت للإخراج على هذا القسم من الصفحة.
CachedDateLabel.Text = DateTime.Now.ToString();
}
// يستدعي عنصر التحكم الاستبدال هذه الطريقة للاسترداد
// التاريخ والوقت الحالي لهذا القسم من الصفحة
// معفى من التخزين المؤقت للإخراج.
سلسلة ثابتة عامة GetCurrentDateTime (سياق HttpContext)
{
إرجاع DateTime.Now.ToString ()؛
}
</script>
<أتش تي أم أل>
<رئيس التشغيل = "الخادم">
<title>مثال للفئة البديلة</title>
</الرأس>
<الجسم>
<معرف النموذج = "form1" runat = "الخادم">
<h3>مثال للفئة البديلة</h3>
<p>لم يتم تخزين هذا القسم من الصفحة في ذاكرة التخزين المؤقت:</p>
<asp: معرف الاستبدال = "Substitution1"
اسم الطريقة = "GetCurrentDateTime"
تشغيل = "الخادم">
</asp:استبدال>
<br />
<p>تم تخزين هذا القسم من الصفحة مؤقتًا:</p>
<asp:label معرف = "CachedDateLabel"
تشغيل = "الخادم">
</asp:التسمية>
<br /><br />
<asp:button معرف = "زر التحديث"
text="تحديث الصفحة"
تشغيل = "الخادم">
</asp:زر>
</النموذج>
</الجسم>