web-dev-qa-db-ja.com

ASP.NETページなしのResolveUrl

次のようなページまたはコントロールインスタンス( MSDN Docs )を使用して相対URLを解決する方法を探しています。

Page.ResolveUrl("~/common/Error.aspx");

...しかし、HttpHandlerを使用している場合など、HttpContextしか使用できない場合。

here のようなカスタム関数を使用する必要がありますか?

または、Pageで使用される基本的な関数を取得する方法はありますか。

63
cweston

ハンドラーからページを取得して ResolveUrl を使用するか、Controlオブジェクトを作成してください...

_(HttpContext.Current.Handler as Page).ResolveUrl("~/virtualpath");
_

または VirtualPathUtility.ToAppRelative(string) または VirtualPathUtility.ToAbsolute(string) を使用します

例えば:

_System.Web.VirtualPathUtility.ToAbsolute("~/Styles/Contoso.xslt");
_

返す

_/WebSite/Styles/Contoso.xslt
_
105
BrunoLM

SO( ASP.Net:共有/静的関数でSystem.Web.UI.Control.ResolveUrl()を使用 )に関するこの質問は、一種の有用に見えます。基本的に、System.Web名前空間の下にある VirtualPathUtility クラスを使用できます。QueryStringパラメータに注意するようにという質問に対する追加の回答がありますが、その解決策も提供されます。 。

同時に、Rick Strahlのコードはとてもきれいです!

17
davidsleeps

このようなものを使用します-Controlsはアプリケーション内のフォルダー名で、myControllerはコントローラー名です。コントローラを作成してインスタンス化し、ロードするには、次のようにします。

Controls_myController ctrl = Page.LoadControl(Page.ResolveUrl("controls/myController.ascx"));

お役に立てれば。

1
Mani