2008-09-12 9 views
79

Dies ist eigentlich eine zweiteilige Frage. Entspricht die HttpContext.Current zuerst dem aktuellen System.UI.Page-Objekt?Holen Sie die aktuelle System.Web.UI.Page von HttpContext?

Und die zweite Frage, die wahrscheinlich mit dem ersten verbunden ist, ist, warum kann ich folgendes zu sehen, ob die aktuelle Seite implementiert eine Schnittstelle verwenden:

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

Der allgemeine Kontext ist, dass einige Kontrollen Sie müssen wissen, ob sie als SharePoint-Webpart oder als Teil eines Asp.Net-Frameworks ausgeführt werden.

Ich habe das Problem gelöst, indem das Steuerelement einen Verweis auf sich selbst übergeben und die Page-Eigenschaft des Steuerelements überprüft, aber ich bin immer noch neugierig, warum das obige nicht funktioniert. Der Compilerfehler ist: Der System.Web.HttpContext kann nicht in ... IWebBase über eine Referenzkonvertierung, Boxkonvertierung, Unboxingkonvertierung, Wrappingkonvertierung oder Nulltypkonvertierung konvertiert werden.

Antwort

134

Nein, von MSDN on HttpContext.Current: "Ruft das HttpContext-Objekt für die aktuelle HTTP-Anforderung ab oder legt es fest."

Mit anderen Worten ist es ein HttpContext-Objekt, kein Page.

Sie können über Httpcontext auf das Page-Objekt erhalten mit:

Page page = HttpContext.Current.Handler as Page; 

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

genau das, was ich brauche ... danke ... :) – AceMark

+0

Dies gab mir den Zugriff, den ich in einer Assembly zu Sitzung, Anfrage und Antwort brauchte. Vielen Dank. – froggythefrog

+0

Thankx, Schöne Informationen. Es hat mir geholfen. – Ratna

37

Sie suchen nach HttpContext.Handler. Seit Page implementiert IHttpHandler, erhalten Sie einen Verweis auf die aktuell ausgeführte Seite. Sie müssen es umwandeln oder zumindest versuchen, es auf den bestimmten Typ, den Sie suchen, zu werfen.

HttpContext.Current gibt einfach die Singleton-Instanz von HttpContext zurück. Daher ist es nicht und kann nie eine Seite sein.

+2

Nur eine Anmerkung für jeden, der dies liest. Die folgende Antwort ist die gleiche, aber mit einem Beispiel (dh Sie verwenden HttpContext.Current.Handler). –

13

Möglicherweise möchten Sie HttpContext.Current.CurrentHandler verwenden, wenn Sie die genaue Seite möchten, die gerade ausgeführt wird. Beispielsweise wird eine Anforderung für Default.aspx gesendet, aber ein Fehler wird ausgelöst und Sie führen eine Response.Transfer auf Ihrer benutzerdefinierten ErrorHandler.aspx-Seite. CurrentHandler gibt die Instanz von ErrorHandler.aspx zurück (wenn nach dem Fehler aufgerufen), während HttpContext.Current.Handler eine Instanz von Default.aspx zurückgibt.

0

Bitte lesen Sie meine Antwort:
Why HttpContext.Current.Handler is null?

Vielleicht ist Ihr Problem gelöst.

+0

-1 Dies ist das gleiche wie die angenommene Antwort. –

+0

Ich benutze den gleichen Code für meine Arbeit, aber Ich war so genervt, weil mir die Details der Arbeitsdetails nicht bekannt waren. Also diesen Code für meine Arbeit entwickelt. Ich dachte, dass Put Code hier um Freunden zu helfen, die mein Problem haben. Vielen Dank John Saunders. –

Verwandte Themen