Frage

Dies ist eigentlich eine zweiteilige Frage. Erstens führt der HttpContext.Current entspricht das aktuelle System.UI.Page Objekt?

Und die zweite Frage, die wahrscheinlich mit dem ersten zusammenhängt, ist, warum kann nicht ich folgend 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 müssen wissen, ob sie als Sharepoint-webpart ausgeführt werden, oder als Teil eines Asp.Net Rahmen.

I gelöst haben das Problem, indem die Steuerung erfordert einen Verweis auf sich zu übergeben, und die Seite Eigenschaft der Steuerprüfung, aber ich bin immer noch neugierig, warum die oben funktioniert nicht.

Der Compiler Fehler ist: Kann nicht System.Web.HttpContext zu ... IWebBase über eine Referenzkonvertierung, Boxen Umwandlung, Unboxing-Konvertierung, Einwickeln Wandlungs- oder Null-Typ-Konvertierung.

War es hilfreich?

Lösung

Nein, von MSDN auf HttpContext.Current: „Ruft das Httpcontext-Objekt für die aktuelle HTTP-Anforderung“

Mit anderen Worten: es ist ein Httpcontext-Objekt, keine Seite.

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

Page page = HttpContext.Current.Handler as Page;

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

Andere Tipps

Sie suchen nach HttpContext.Handler. Da Seite IHttpHandler implementiert, werden erhalten Sie einen Verweis auf die derzeit ausgeführte page.You'll haben sie zu werfen, oder zumindest versuchen, es auf die jeweilige Art zu werfen, die Sie suchen.

HttpContext.Current gibt einfach die einzelne Instanz der Httpcontext. Daher ist es nicht und kann es nie sein, eine Seite.

Sie können wollen HttpContext.Current.CurrentHandler verwenden, wenn Sie die genaue Seite mögen, die gerade ausgeführt wird. Zum Beispiel wird ein Antrag auf Default.aspx geschickt, aber ein Fehler ausgelöst wird, und Sie tun, um eine Response.Transfer zu Ihrer benutzerdefinierten ErrorHandler.aspx Seite. CurrentHandler wird die Instanz von ErrorHandler.aspx zurückkehren (falls nach dem Fehler genannt), während HttpContext.Current.Handler würde eine Instanz Default.aspx zurück.

Bitte lesen Sie meine Antwort:
Warum HttpContext.Current.Handler ist null?
Vielleicht gelöst Ihr Problem.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top