هل تريد الحصول على System.Web.UI.Page الحالي من HttpContext؟

StackOverflow https://stackoverflow.com/questions/58123

  •  09-06-2019
  •  | 
  •  

سؤال

هذا في الواقع سؤال من جزأين.أولاً، هل يتوافق HttpContext.Current مع كائن System.UI.Page الحالي؟

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

private IWebBase FindWebBase()
{
    if (HttpContext.Current as IWebBase != null)
    {
        return (IWebBase)HttpContext.Current.;
    }
    throw new NotImplementedException("Crawling for IWebBase not implemented yet");
}

السياق العام هو أن بعض عناصر التحكم تحتاج إلى معرفة ما إذا كان يتم تنفيذها كجزء ويب SharePoint، أو كجزء من إطار عمل Asp.Net.

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

خطأ المترجم هو:لا يمكن تحويل System.Web.HttpContext إلى ...IWebBase عبر تحويل مرجعي، أو تحويل الملاكمة، أو تحويل إلغاء العلبة، أو تحويل الالتفاف، أو تحويل النوع الفارغ.

هل كانت مفيدة؟

المحلول

لا، من MSDN على HttpContext.Current:"الحصول على كائن HttpContext أو تعيينه لطلب HTTP الحالي."

وبعبارة أخرى، فهو كائن HttpContext، وليس صفحة.

يمكنك الوصول إلى كائن الصفحة عبر HttpContext باستخدام:

Page page = HttpContext.Current.Handler as Page;

if (page != null)
{
     // Use page instance.
}

نصائح أخرى

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

HttpContext.Current ببساطة تقوم بإرجاع المثيل المفرد لـ HttpContext.لذلك، فهي ليست صفحة، ولا يمكن أن تكون أبدًا.

قد ترغب في استخدام HttpContext.Current.CurrentHandler إذا كنت تريد الصفحة الدقيقة التي يتم تنفيذها حاليًا.على سبيل المثال، تم إرسال طلب لـ Default.aspx، ولكن تم طرح خطأ وقمت بتنفيذ Response.Transfer إلى صفحة ErrorHandler.aspx المخصصة الخاصة بك. CurrentHandler سيُرجع مثيل ErrorHandler.aspx (إذا تم استدعاؤه بعد الخطأ) بينما HttpContext.Current.Handler سيعود مثيل Default.aspx.

يرجى الاطلاع على إجابتي:
لماذا يعتبر HttpContext.Current.Handler فارغًا؟

ربما حل مشكلتك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top