HttpContext'ten geçerli System.Web.UI.Page alınsın mı?


85

Bu aslında iki bölümden oluşan bir sorudur. İlk olarak, HttpContext.Current geçerli System.UI.Page nesnesine karşılık geliyor mu?

Muhtemelen ilkiyle ilgili olan ikinci soru, şu anki sayfanın bir arayüz uygulayıp uygulamadığını görmek için neden aşağıdakileri kullanamıyorum:

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

Genel bağlam, bazı kontrollerin bir SharePoint web bölümü olarak mı yoksa bir Asp.Net çerçevesinin bir parçası olarak mı yürütüldüğünü bilmek zorunda olmasıdır.

Kontrolün kendisine bir referans vermesini zorunlu kılarak ve kontrolün Sayfa özelliğini kontrol ederek sorunu çözdüm, ancak yine de yukarıdakilerin neden çalışmadığını merak ediyorum.

Derleyici hatası: System.Web.HttpContext, bir referans dönüştürme, kutulama dönüşümü, kutudan çıkarma dönüşümü, sarma dönüşümü veya boş tip dönüşümü yoluyla ... IWebBase'e dönüştürülemiyor.

Yanıtlar:


144

Hayır, HttpContext.Current üzerindeki MSDN'den: "Geçerli HTTP isteği için HttpContext nesnesini alır veya ayarlar."

Başka bir deyişle, bir Sayfa değil, bir HttpContext nesnesidir.

Sayfa nesnesine HttpContext aracılığıyla şunları kullanarak ulaşabilirsiniz:

Page page = HttpContext.Current.Handler as Page;

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

2
Yanlış olduğu için olumsuz oy verildi. HttpContext.Current.CurrentHandler ile cevap doğru! Bir Server.Transfer yaparsanız, HttpContext.Current.Handler ÖNCEKİ SAYFA OLACAK, HttpContext.Current.CurrentHandler MEVCUT SAYFA OLACAK
mike

37

Arıyorsun HttpContext.Handler. Sayfa, IHttpHandler'ı uyguladığından, şu anda çalıştırılan sayfaya bir referans elde edeceksiniz. Onu çevirmeniz veya en azından aradığınız belirli türe çevirmeyi denemeniz gerekir.

HttpContext.CurrentHttpContext'in singleton örneğini döndürür. Bu nedenle, bir sayfa değildir ve asla olamaz.


2
Bunu okuyanlara sadece bir not. Aşağıdaki cevap aynıdır, ancak bir örnekle (yani HttpContext.Current.Handler kullanıyorsunuz).
mike nelson

15

HttpContext.Current.CurrentHandlerHalihazırda çalışmakta olan sayfayı tam olarak istiyorsanız kullanmak isteyebilirsiniz. Örneğin, Default.aspx için bir istek gönderilir, ancak bir hata atılır ve Response.Transferözel ErrorHandler.aspx sayfanıza bir yaparsınız . CurrentHandlerErrorHandler.aspx örneğini döndürür (hatadan sonra çağrılırsa), oysa HttpContext.Current.HandlerDefault.aspx örneğini döndürür.


0

Lütfen
cevabıma bakın: Neden HttpContext.Current.Handler null?

Belki sorununuzu çözdünüz.


İşim için aynı kodu kullanıyorum, ancak iş detaylarının ayrıntılarının farkında olmadığım için çok sinirlenmiştim. Bu kodu işim için geliştirdim. Sorunum olan arkadaşlara yardım etmek için Kodu Buraya Koyun diye düşündüm. Teşekkürler John Saunders.
Amin Ghaderi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.