Использование тильды (~) в пути asp.net

Я работаю над приложением asp.net, следующая ссылка работает в IE, но не в FF.

<a href="~/BusinessOrderInfo/page.aspx" >

Это не тильда, которую можно использовать только в элементах управления сервером asp.net. Где он будет заменен фактическим путем?

Можно ли использовать тильду в привязном теге? Если да, то что это значит?

Когда я нахожусь в корне, ссылка работает

www.myserver.com/default.aspx, click the link, ok!

www.myserver.com/otherpart/default.aspx, click the link, not ok!

Ссылка, сгенерированная ASP.NET:

www.myserver.com/otherpart/~BusinessOrderInfo/page.aspx

Это по дизайну?

Ответ 1

Вы правы, он работает только в средствах управления сервером. У вас есть следующие основные параметры:

Измените на HyperLink для запуска Веб-контроль:

<asp:HyperLink NavigateUrl="~/BusinessOrderInfo/page.aspx" Text="Whatever" runat="server" />

Или запустите якорь на стороне сервера как HTML-контроль:

<a href="~/BusinessOrderInfo/page.aspx" runat="server" >

Или используйте Page.ResolveUrl:

<a href="<%= Page.ResolveUrl("~/BusinessOrderInfo/page.aspx") %>">...</a>

Ответ 2

Элементы управления HTML можно превратить в элементы управления сервером, добавив атрибут runat = "server".

<a href="~/BusinessOrderInfo/page.aspx" runat="server">

Ответ 3

Тильда относится к корневому каталогу приложения и будет правильно переведена в свойства управления, такие как NavigateUrl.

Я понимаю, что если вы используете его в тегах с открытым тегом HTML, он не будет транслироваться ASP.Net.

Ответ 4

Если вы удалите тильду и используете только косую черту, вы получите тот же результат, то есть указав на корневую папку в текущем домене:

<a href="/BusinessOrderInfo/page.aspx" >

Ответ 5

Эта функция также может использоваться для разрешения путей для не-серверных элементов

VirtualPathUtility.ToAbsolute($"~/App_Themes/Default/Icons/myimage.gif")