فهم إعادة الإرسال في ASP.NET

عند تطوير تطبيقات ASP.NET، تعد إدارة إعادة الإرسال من التحديات الشائعة – وهي العملية التي ترسل فيها الصفحة بيانات إلى الخادم لمعالجتها. خاصة في الشيفرات القديمة، يكون من الضروري تحديد الحدث الذي تسبب في إعادة الإرسال بشكل فعال. في هذه التدوينة، سنستعرض طريقة محسّنة لتحديد أحداث إعادة الإرسال ضمن حدث Page_Load دون الاعتماد على فحوصات معقدة وهشة.

المشكلة

في نموذج ويب ASP.NET التقليدي، عندما يتفاعل المستخدم مع عنصر تحكم (مثل زر)، تخضع الصفحة لإعادة إرسال تؤدي إلى تنفيذ الشيفرة على جانب الخادم. غالبًا ما تحاول الشيفرات القديمة تحديد أي عنصر تحكم بدأ إعادة الإرسال من خلال فحص بيانات Request مباشرة.

إليك جزء من التنفيذ المعيب:

if (Request.Form["__EVENTTARGET"] != null &&
    (Request.Form["__EVENTTARGET"].IndexOf("BaseGrid") > -1 || Request.Form["btnSave"] != null))
{
    // القيام بشيء ما
}

بينما تحقق هذه الطريقة الهدف المطلوب، إلا أنها عرضة للكسر إذا تغير اسم أي عنصر تحكم، ويمكن أن تشوش الشفرة الخاصة بك. لذا، ماذا يمكننا أن نفعل بدلاً من ذلك؟

حل أفضل: الحصول على عنصر التحكم المسؤول عن إعادة الإرسال

بدلاً من فحص معلمات الطلب المحددة، يمكننا إنشاء طريقة مساعدة، GetPostBackControl، التي تحدد ديناميكيًا العنصر المسؤول عن إعادة الإرسال. يجعل هذا النهج الشيفرة الخاصة بك أنظف وأقل عرضة للأخطاء.

التنفيذ

إليك كيفية تنفيذ هذه الطريقة في تطبيق ASP.NET الخاص بك:

public static Control GetPostBackControl(Page page)
{
    Control control = null;
    string ctrlname = page.Request.Params.Get("__EVENTTARGET");

    if (!string.IsNullOrEmpty(ctrlname))
    {
        control = page.FindControl(ctrlname);
    }
    else
    {
        foreach (string ctl in page.Request.Form)
        {
            Control c = page.FindControl(ctl);
            if (c is System.Web.UI.WebControls.Button)
            {
                control = c;
                break;
            }
        }
    }
    return control;
}

شرح الشيفرة

  • استرجاع هدف الحدث: تبدأ الطريقة بمحاولة الحصول على قيمة معلمة __EVENTTARGET، والتي تشير إلى العنصر الذي كان مسؤولاً عن إعادة الإرسال.

  • البحث عن العنصر: إذا تم العثور على اسم عنصر تحكم، تستخدم الطريقة FindControl للحصول على العنصر المرتبط في الصفحة.

  • الاحتياطي لعنصر التحكم من زر: إذا لم يتم العثور على اسم عنصر تحكم من __EVENTTARGET، تقوم الطريقة بالتكرار خلال جميع عناصر التحكم في النموذج. إذا وجدت عنصر تحكم هو زر، فستعيد ذلك الزر كالعنصر الذي بدأ إعادة الإرسال.

فوائد هذا النهج

  • البساطة: تقوم الطريقة بإخفاء تعقيد تحديد عنصر التحكم الذي إعادة الإرسال، مما يسهل إدارة الشيفرة الخاصة بك.

  • الصلابة: بهذه الطريقة، تكون الشيفرة الخاصة بك أقل هشاشة تجاه التغييرات في معرفات العناصر أو الهياكل لأنها لا تعتمد مباشرة على أسماء محددة.

الخلاصة

تحديد أحداث إعادة الإرسال في ASP.NET أمر بالغ الأهمية للحفاظ على الوظائف وقابلية الاستخدام في تطبيقات الويب الخاصة بك. من خلال استخدام طريقة GetPostBackControl، يمكنك تبسيط الشيفرة الخاصة بك وتجنب المشاكل المحتملة المرتبطة بالأنظمة القديمة.

للاستكشاف المتعمق ونصائح إضافية، يمكنك الاطلاع على المزيد حول هذا الموضوع هنا.

مع هذه الطريقة الأنظف للتعامل مع إعادة الإرسال، يمكنك التأكد من أن تطبيقك يبقى فعالاً وقابل للصيانة.