Question

Il s'agit en fait d'une question en deux parties.Tout d’abord, le HttpContext.Current correspond-il à l’objet System.UI.Page actuel ?

Et la deuxième question, qui est probablement liée à la première, est pourquoi ne puis-je pas utiliser ce qui suit pour voir si la page actuelle implémente une interface :

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

Le contexte général est que certains contrôles doivent savoir s’ils s’exécutent en tant que composant WebPart SharePoint ou dans le cadre d’un framework Asp.Net.

J'ai résolu le problème en exigeant que le contrôle se transmette une référence à lui-même et en vérifiant la propriété Page du contrôle, mais je suis toujours curieux de savoir pourquoi ce qui précède ne fonctionne pas.

L'erreur du compilateur est :Impossible de convertir System.Web.HttpContext en ...IWebBase via une conversion de référence, une conversion de boxe, une conversion de déballage, une conversion d'encapsulation ou une conversion de type nul.

Était-ce utile?

La solution

Non, depuis MSDN sur HttpContext.Current :"Obtient ou définit l'objet HttpContext pour la requête HTTP actuelle."

En d'autres termes, il s'agit d'un objet HttpContext, pas d'une page.

Vous pouvez accéder à l'objet Page via HttpContext en utilisant :

Page page = HttpContext.Current.Handler as Page;

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

Autres conseils

Vous cherchez HttpContext.Handler.Puisque Page implémente IHttpHandler, vous obtiendrez une référence à la page en cours d'exécution. Vous devrez la convertir, ou au moins essayer de la convertir dans le type particulier que vous recherchez.

HttpContext.Current renvoie simplement l'instance singleton de HttpContext.Ce n’est donc pas et ne pourra jamais être une page.

Vous voudrez peut-être utiliser HttpContext.Current.CurrentHandler si vous voulez la page précise en cours d'exécution.Par exemple, une requête pour Default.aspx est envoyée, mais une erreur est générée et vous effectuez une Response.Transfer à votre page ErrorHandler.aspx personnalisée. CurrentHandler renverra l'instance de ErrorHandler.aspx (si elle est appelée après l'erreur) alors que HttpContext.Current.Handler renverrait une instance de Default.aspx.

S'il vous plaît voir ma réponse:
Pourquoi HttpContext.Current.Handler est nul ?

Peut-être résolu votre problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top