1. ホーム
  2. c#

[解決済み] HttpContextから現在のSystem.Web.UI.Pageを取得する?

2023-05-21 15:27:55

質問

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

そして2つ目の質問は、おそらく1つ目の質問と関連していますが、なぜ現在のページがインターフェースを実装しているかどうかを見るために以下を使うことができないのかということです。

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 に変換することができません。

どのように解決するのですか?

いいえ、MSDN の HttpContext.Current: "Gets or sets the HttpContext object for the current HTTP request." に記載されています。

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

を使ってHttpContext経由でPageオブジェクトにアクセスすることができます。

Page page = HttpContext.Current.Handler as Page;

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