ASP.ネット:共有/静的関数での System.Web.UI.Control.ResolveUrl() の使用
-
09-06-2019 - |
質問
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 コントロール メソッドを実行する傾向があります。
所属していません StackOverflow