Получение базового URL корня сайта (абсолютный / относительный URL)
Я хочу полностью понять, как использовать относительный и абсолютный адрес URL в статических и динамических файлах.
~ :
/ :
.. : in a relative URL indicates the parent directory
. : refers to the current directory
/ : always replaces the entire pathname of the base URL
// : always replaces everything from the hostname onwards
Этот пример прост, когда вы работаете без виртуального каталога. Но я работаю над виртуальным каталогом.
Relative URI Absolute URI
about.html http://WebReference.com/html/about.html
tutorial1/ http://WebReference.com/html/tutorial1/
tutorial1/2.html http://WebReference.com/html/tutorial1/2.html
/ http://WebReference.com/
//www.internet.com/ http://www.internet.com/
/experts/ http://WebReference.com/experts/
../ http://WebReference.com/
../experts/ http://WebReference.com/experts/
../../../ http://WebReference.com/
./ http://WebReference.com/html/
./about.html http://WebReference.com/html/about.html
Я хочу смоделировать сайт ниже, как мой проект, который работает в виртуальном каталоге.
Это мои aspx и ascx папки
http://hostAddress:port/virtualDirectory/MainSite/ASPX/default.aspx
http://hostAddress:port/virtualDirectory/MainSite/ASCX/UserCtrl/login.ascx
http://hostAddress:port/virtualDirectory/AdminSite/ASPX/ASCX/default.aspx
Это мои JS-файлы (которые будут использоваться с файлами aspx и ascx):
http://hostAddress:port/virtualDirectory/MainSite/JavascriptFolder/jsFile.js
http://hostAddress:port/virtualDirectory/AdminSite/JavascriptFolder/jsFile.js
это мой статический адрес веб-страницы (я хочу показать несколько картинок и запустить некоторые функции js):
http://hostAddress:port/virtualDirectory/HTMLFiles/page.html
это моя папка с изображениями
http://hostAddress:port/virtualDirectory/Images/PNG/arrow.png
http://hostAddress:port/virtualDirectory/Images/GIF/arrow.png
если я хочу написать и ссылку на файл изображения в моем файле ASPX, я должен написать
aspxImgCtrl.ImageUrl = Server.MapPath("~")+"/Images/GIF/arrow.png";
Но если я хочу написать путь, жестко запрограммированный или из файла javascript, какой это должен быть адрес URL?
1 ответ
Оператор ~ распознается asp.net только для серверных элементов управления и в коде сервера. Вы не можете использовать оператор ~ для клиентских элементов.
Абсолютные и относительные ссылки на пути в серверном элементе управления имеют следующие недостатки:
• Абсолютные пути не переносимы между приложениями. Если вы переместите приложение, на которое указывает абсолютный путь, ссылки будут разорваны.
• Относительные пути в стиле клиентских элементов может быть трудно поддерживать, если вы перемещаете ресурсы или страницы в разные папки.
Чтобы преодолеть эти недостатки, ASP.NET включает корневой оператор веб-приложения (~), который можно использовать при указании пути в элементах управления сервером. ASP.NET преобразует оператор ~ в корень текущего приложения. Вы можете использовать оператор ~ в сочетании с папками, чтобы указать путь, основанный на текущем корне.
Что касается приведенного вами примера
aspxImgCtrl.ImageUrl = Server.MapPath("~")+"/Images/GIF/arrow.png";
Приведенный выше код будет отображать физический путь к серверу (например, - c:\inetpub\wwwroot\mysite\images\gif\arrow.png", что означает меньше на стороне клиента,
Вы должны использовать это для правильного относительного пути клиента:
aspxImgCtrl.ImageUrl = "~/Images/GIF/arrow.png";
Чтобы ссылаться на ресурсы из javascript, вы можете рассмотреть структуру папок одного уровня, чтобы унифицировать пути доступа. например:
- страницы
- JS
- Pix
- так далее...
Для более подробной информации посетите веб-сайт asp.net