الـ Postback والـ Cross-Page Posting في الـ ASP.NET

04 أبريل 2016     796 مشاهدة    0 تعليق
تم النشر في #PostBack 

الـ Postback هو أحد الأمور التي لا تغيب عن أي مطور في تقنية الـ ASP.NET, فالـ ASP.NET نفسها تستخدم مفهوم الإرسال لتنفيذ الأحداث في أي صفحة. فلو تم النقر على زر في صفحة معينة فأن الصفحه تعمل Postback لنفسها لمعالجة هذا الحدث.

كما هو معلوم اثناء تطوير اي موقع, فأنه يتم الارسال من صفحه إلى صفحه أخرى, او الإرسال إلى الصفحه نفسها, فيمكن أن يخطر سؤال للقارىء ماهي الفائده من الـ Postback, لو نلاحظ أي صفحة ASP.NET تحتوي على خاصيه إسمها IsPostback وهي ترجع قيمة منطقية لتحديد إذا تم إرسال الصفحه من قبل الخادم مسبقاً او لا, طبعا أكيد في أول مره لم ترسل من قبل لذا القيمه الإفتراضيه هي False وفي المره القادمه تكون True.

طبعا هذه الخاصيه ممكن أن تخدم المطور في أكثر من سيناريو, فلو كانت الصفحة تقرأ من ملف أو تجلب بيانات من قاعدة بيانات, فأنها تأخذ وقتاً لتنفيذ تلك العمليات, ناهيك أن لو تم عمل إنعاش للصفحه فإن الشيفره الموجوده في حدث التحميل Load ستتنفذ مره أخرى, فالآن نلاحظ ان هناك هدر في الوقت فماذا لو تم جلب البيانات في أول مره تم تحميل الصفحة وفي المرات الأخرى يتم عرضها لأن البيانات قد تم جلبها مسبقاً.

لنلقي نظرة على الشيفرة التاليه:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
If Not Page.IsPostback Then
BindData()
End If
End Sub

نلاحظ من السابق أنه سيتم تنفيذ الإجراء BindData في المرة الأولى التي يتم تحميل الصفحه فيها, اما في المرات التي التاليه في أن الصفحه تم إرسالها مسبقاً لذا لن يتم تنفيذ الشيفرة بتاتاً, فنصيحتي حاول إستخدام الخاصية IsPostback في المكان المناسب.

الآن وقد رأينا معرفة ما إذا تم عمل Postback للصفحه أم لا نتتطرق إلى الـ Cross Page Posting وهو عملية الإرسال من صفحة إلى أخرى, ممكن يتسأل البعض لماذا نحتاج الـ Postback بين الصفحات؟!! قد تواجه سيناريوهات عديدة تحتاج التعرف على خاصية او قيمة أداة موجودة في الصفحة السابقة التي تم الإرسال منها, فبإستخدام الخاصية IsCrossPagePostback يمكنك التحقق ما إذا تم الإرسال من صفحة سابقة

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
If Not PreviousPage.IsCrossPagePostback Then
' Cross page posting ..
End If
End Sub

ولكن قبلها يجب وضع السطر التالي بعد الـ Page Directive في الصفحة aspx

<%@ PreviousPageType VirtualPath="~/FirstPage.aspx" %>

واذا أردنا الحصول على قيمة أي أداة في الصفحة السابقة يمكننا إستخدام الإجراء ()FindControl في الخاصية PreviousPage على النحو التالي:

Dim name As TextBox = CType(PreviousPage.FindControl("txtName"), TextBox)

تويتر فيسبوك قوقل + لينكد إن


اكتب تعليقك