Domanda

Questa è in realtà una domanda in due parti.Innanzitutto, HttpContext.Current corrisponde all'oggetto System.UI.Page corrente?

E la seconda domanda, che probabilmente è correlata alla prima, è perché non posso usare quanto segue per vedere se la pagina corrente implementa un'interfaccia:

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

Il contesto generale è che alcuni controlli devono sapere se vengono eseguiti come web part di SharePoint o come parte di un framework Asp.Net.

Ho risolto il problema richiedendo al controllo di passare un riferimento a se stesso e controllando la proprietà Page del controllo, ma sono ancora curioso di sapere perché quanto sopra non funziona.

L'errore del compilatore è:Impossibile convertire System.Web.HttpContext in ...IWebBase tramite una conversione di riferimento, una conversione boxing, una conversione unboxing, una conversione wrap o una conversione di tipo null.

È stato utile?

Soluzione

No, da MSDN su HttpContext.Current:"Ottiene o imposta l'oggetto HttpContext per la richiesta HTTP corrente."

In altre parole è un oggetto HttpContext, non una Page.

Puoi accedere all'oggetto Page tramite HttpContext usando:

Page page = HttpContext.Current.Handler as Page;

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

Altri suggerimenti

Stai cercando HttpContext.Handler.Poiché Page implementa IHttpHandler, otterrai un riferimento alla pagina attualmente in esecuzione. Dovrai eseguirne il cast, o almeno provare a eseguirne il cast nel tipo particolare che stai cercando.

HttpContext.Current restituisce semplicemente l'istanza singleton di HttpContext.Pertanto non è e non potrà mai essere una pagina.

Potresti voler usare HttpContext.Current.CurrentHandler se desideri la pagina precisa attualmente in esecuzione.Ad esempio, viene inviata una richiesta per Default.aspx, ma viene generato un errore e si esegue a Response.Transfer alla pagina ErrorHandler.aspx personalizzata. CurrentHandler restituirà l'istanza di ErrorHandler.aspx (se chiamato dopo l'errore) mentre HttpContext.Current.Handler restituirebbe un'istanza di Default.aspx.

Si prega di vedere la mia risposta:
Perché HttpContext.Current.Handler è null?

Forse hai risolto il tuo problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top