2008-08-25 7 views
32

Каков наилучший способ использования ResolveUrl() в общей/статической функции в Asp.Net? Мой текущий решение для VB.Net является:ASP.Net: Использование System.Web.UI.Control.ResolveUrl() в общей/статической функции

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"); 

Но я понимаю, что это не самый лучший способ вызвать его.

ответ

3

Я использую HttpContext.Current, чтобы получить страницу, а затем запустите любые методы управления веб-страницами.

21

Стоит отметить, что хотя System.Web.VirtualPathUtility.ToAbsolute здесь очень полезен, это не прекрасная замена для Control.ResolveUrl.

Существует по крайней мере одно существенное различие: 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 может это сделать для вас).

+0

Это может быть и неправдой. В .NET 4, когда я оцениваю `VirtualPathUtility.ToAbsolute (" ~/bar/baz? Qux = 123 & quux = 456 ","/foo ")` Я получаю `/ foo/bar/baz? Qux = 123 & quux = 456` – 2016-09-15 17:09:24

 Смежные вопросы

  • Нет связанных вопросов^_^