2008-09-12 15 views
79

これは実際には2つの部分の質問です。まず、HttpContext.Currentは現在のSystem.UI.Pageオブジェクトに対応していますか?HttpContextから現在のSystem.Web.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プロパティをチェックするように要求することで問題を解決しましたが、私はまだ上記が機能しない理由が不思議です。

コンパイラエラー: System.Web.HttpContextを参照変換、ボクシング変換、unboxing変換、ラッピング変換またはnull型変換を介してIWebBaseに変換できません。

答えて

134

いいえ、MSDNのHttpContext.Current: "現在のHTTP要求のHttpContextオブジェクトを取得または設定します。"

つまり、ページではなくHttpContextオブジェクトです。

あなたは使用してのHttpContextを経由してPageオブジェクトを取得することができます

Page page = HttpContext.Current.Handler as Page; 

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

ちょうど私が必要なもの...ありがとう... :) – AceMark

+0

これは私に、セッション、リクエスト、レスポンスへのアセンブリの中で必要なアクセスを与えました。ありがとうございました。 – froggythefrog

+0

ありがとう、素敵な情報。それは私を助けた。 – Ratna

37

あなたはHttpContext.Handlerを探しています。 PageがIHttpHandlerを実装しているので、現在実行中のページへの参照を取得します。キャストするか、少なくとも探している特定の型にキャストしようとします。

HttpContext.Currentは、単純にHttpContextのシングルトンインスタンスを返します。したがって、それは決してページではありません。

+2

これを読んでいる人にはちょっと注意してください。以下の答えは同じですが、例(つまり、HttpContext.Current.Handlerを使用しています)。 –

13

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

0

私の答えをご覧ください。 Why HttpContext.Current.Handler is null?


はたぶん、あなたの問題を解決しました。

+0

-1になります。これは受け入れられた回答と同じです。 –

+0

私は自分の仕事に同じコードを使っていますが、 私は仕事の詳細の詳細を知らなかったので、私はとても迷惑でした。 私の悪い人のためにこのコードを開発しました。 私は、ここにコードを入れて、自分の問題を抱えている友人を助けると思った。 John Saundersさんに感謝します。 –

関連する問題