質問

Asp.Net の共有/静的関数で ResolveUrl() を使用する最良の方法は何ですか?私の現在の VB.Net ソリューションは次のとおりです。

Dim x As New System.Web.UI.Control
x.ResolveUrl("~/someUrl")

または C#:

System.Web.UI.Control x = new System.Web.UI.Control();
x.ResolveUrl("~/someUrl");

しかし、それが最良の呼び方ではないことは理解しています。

役に立ちましたか?

他のヒント

System.Web.VirtualPathUtility.ToAbsolute はここでは非常に便利ですが、 ない Control.ResolveUrl の完全な代替品です。

少なくとも 1 つの大きな違いがあります。Control.ResolveUrl はクエリ文字列を非常に適切に処理しますが、クエリ文字列により VirtualPathUtility が HttpException をスローします。これは、特に Control.ResolveUrl の動作方法に慣れている場合、初めて発生した場合はまったく戸惑うかもしれません。

使用したいクエリ文字列の正確な構造がわかっている場合、これは十分に簡単に回避できます。

public static string GetUrl(int id)
{
    string path = VirtualPathUtility.ToAbsolute("~/SomePage.aspx");
    return string.Format("{0}?id={1}", path, id);
}

...しかし、クエリ文字列が未知のソースから渡された場合は、何らかの方法でそれを解析する必要があります。(これについて深く掘り下げる前に、System.Uri がそれを実行できる可能性があることに注意してください)。

私は、HttpContext.Current を使用してページを取得し、そこからページ/Web コントロール メソッドを実行する傾向があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top