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

это дизайн?

5 67

5 ответов:

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

заменить на HyperLink запустить как Web Control:

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

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

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

или Page.ResolveUrl:

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

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

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

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

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

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

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

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

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