Obtenez de l'actuel Système.Web.L'INTERFACE utilisateur.Page de HttpContext?
C'est en fait une deuxième partie de la question. D'abord,le HttpContext.Actuelles correspondent au Système actuel.L'INTERFACE utilisateur.L'objet de Page?
Et la deuxième question, qui est probablement liée à la première, c'est pourquoi je ne peux pas utiliser les éléments suivants pour voir si la page en cours 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 sont en cours d'exécution comme un webpart SharePoint, ou dans le cadre d'un Asp.Net cadre.
J'ai résolu le problème en exigeant le contrôle pour passer une référence à lui-même, et vérification de la Page de propriété du contrôle, mais je suis toujours curieux de savoir pourquoi cela ne fonctionne pas.
L'erreur de compilation est:
Impossible de convertir le Système.Web.HttpContext à ...IWebBase via une conversion de référence, de la boxe de la conversion, de l'unboxing de la conversion, de conditionnement, de conversion ou de type null conversion.
Vous devez vous connecter pour publier un commentaire.
Pas, à partir de MSDN sur HttpContext.Courant: "Obtient ou définit la HttpContext objet pour la présente requête HTTP."
En d'autres mots, c'est un HttpContext objet, pas une Page.
Vous pouvez accéder à la Page de l'objet via HttpContext à l'aide de:
Vous êtes à la recherche pour
HttpContext.Handler
. Depuis la Page met en œuvre IHttpHandler, vous allez obtenir une référence à l'exécution de la page.Vous aurez à le jeter, ou au moins essayer de convertir le type que vous recherchez.HttpContext.Current
retourne simplement l'instance du singleton de HttpContext. Par conséquent, il n'est pas et ne sera jamais une page.Vous souhaiterez peut-être utiliser
HttpContext.Current.CurrentHandler
si vous voulez que le précise la page qui est actuellement en cours d'exécution. Par exemple, une requête pour Défaut.aspx est envoyé, mais une erreur est générée et vous faire unResponse.Transfer
personnalisé ErrorHandler.page aspx.CurrentHandler
sera de retour l'instance de ErrorHandler.aspx (si la fonction est appelée après le message d'erreur) alors queHttpContext.Current.Handler
serait de retourner une instance par Défaut.aspx.Veuillez voir ma réponse :
Pourquoi HttpContext.Actuel.Gestionnaire est nulle?
Peut-être résolu votre problème.