HttpContextから現在のSystem.Web.UI.Pageを取得しますか?


84

これは実際には2つの部分からなる質問です。まず、HttpContext.Currentは現在のSystem.UI.Pageオブジェクトに対応していますか?

そして、おそらく最初の質問に関連する2番目の質問は、現在のページがインターフェイスを実装しているかどうかを確認するために、次の質問を使用できない理由です。

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

一般的なコンテキストでは、一部のコントロールは、SharePoint Webパーツとして実行されているのか、Asp.Netフレームワークの一部として実行されているのかを知る必要があります。

コントロールにそれ自体への参照を渡すように要求し、コントロールのPageプロパティを確認することで問題を解決しましたが、上記が機能しない理由についてはまだ興味があります。

コンパイラエラーは次のとおりです。参照変換、ボックス化変換、ボックス化解除変換、ラッピング変換、またはnull型変換を介してSystem.Web.HttpContextを... IWebBaseに変換できません。

回答:


144

いいえ、HttpContext.CurrentのMSDNから:「現在のHTTPリクエストのHttpContextオブジェクトを取得または設定します。」

つまり、これはHttpContextオブジェクトであり、Pageではありません。

以下を使用して、HttpContextを介してPageオブジェクトにアクセスできます。

Page page = HttpContext.Current.Handler as Page;

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

2
間違っているため、反対票を投じました。HttpContext.Current.CurrentHandlerの答えは正しいです!Server.Transferを実行すると、HttpContext.Current.Handlerが前のページになり、HttpContext.Current.CurrentHandlerが現在のページになります
マイク2016年

37

あなたが探しているHttpContext.Handler。PageはIHttpHandlerを実装しているため、現在実行中のページへの参照を取得します。それをキャストするか、少なくとも探している特定のタイプにキャストする必要があります。

HttpContext.CurrentHttpContextのシングルトンインスタンスを返すだけです。したがって、それはページではなく、決してそうなることはありません。


2
これを読んでいる人へのメモ。以下の答えは同じですが、例があります(つまり、HttpContext.Current.Handlerを使用します)。
マイクネルソン

15

HttpContext.Current.CurrentHandler現在実行中の正確なページが必要な場合に使用することをお勧めします。たとえば、Default.aspxの要求が送信されたが、エラーがスローさResponse.Transferれ、カスタムErrorHandler.aspxページに対してを実行したとします。CurrentHandlerErrorHandler.aspxのインスタンスを返します(エラーの後に呼び出された場合)がHttpContext.Current.Handler、Default.aspxのインスタンスを返します。


0

私の答えを見てください:
なぜHttpContext.Current.Handlerがnullなのですか?

多分あなたの問題を解決しました。


仕事にも同じコードを使っていますが、仕事の詳細がわからなかったのでとてもイライラしました。だから私の仕事のためにこのコードを開発しました。私の問題を抱えている友人を助けるために、ここにコードを入れてください。ジョンサンダースに感謝します。
アミンガデリ2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.