次のようなページまたはコントロールインスタンス( MSDN Docs)を使用する場合と同じように相対URLを解決する方法を探しています。
Page.ResolveUrl("~/common/Error.aspx");
...ただし、HttpHandlerを使用している場合など、使用できるHttpContextのみがある場合。
ここに表示されているようなカスタム関数を使用する必要がありますか?
または、ページで使用される基本的な関数を取得する方法はありますか。
次のようなページまたはコントロールインスタンス( MSDN Docs)を使用する場合と同じように相対URLを解決する方法を探しています。
Page.ResolveUrl("~/common/Error.aspx");
...ただし、HttpHandlerを使用している場合など、使用できるHttpContextのみがある場合。
ここに表示されているようなカスタム関数を使用する必要がありますか?
または、ページで使用される基本的な関数を取得する方法はありますか。
ハンドラーからページを取得して使用するResolveUrl
か、コントロールオブジェクトを作成してみてください...
(HttpContext.Current.Handler as Page).ResolveUrl("~/virtualpath");
または使用VirtualPathUtility.ToAppRelative(string)
またはVirtualPathUtility.ToAbsolute(string)
例えば:
System.Web.VirtualPathUtility.ToAbsolute("~/Styles/Contoso.xslt");
戻り値
/WebSite/Styles/Contoso.xslt
SOに関するこの質問(ASP.Net:共有/静的関数でのSystem.Web.UI.Control.ResolveUrl()の使用)はちょっと役に立ちそうです...基本的に、System.Webの下にあるVirtualPathUtilityクラスを使用できます名前空間。その質問に対する追加の回答があり、QueryStringパラメーターに注意する必要がありますが、その解決策も提供されています。
同時に、リック・シュトラールのコードはかなりきちんとしています!
次のようなものを使用します-Controlsはアプリケーション内のフォルダー名であり、myControllerはコントローラー名です。コントローラを作成してインスタンス化してロードするには、次の方法で実行できます。
Controls_myController ctrl = Page.LoadControl(Page.ResolveUrl("controls/myController.ascx"));
お役に立てれば。