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 に変換できません。

4

4 に答える 4

143

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

つまり、これは Page ではなく HttpContext オブジェクトです。

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

Page page = HttpContext.Current.Handler as Page;

if (page != null)
{
     // Use page instance.
}
于 2008-09-12T01:42:57.017 に答える
37

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

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

于 2008-09-12T01:42:26.110 に答える
15

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

于 2011-07-07T22:05:16.037 に答える