Использование тильды (~) в пути 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")