Я относительно новичок в ASP.NET и задавался вопросом, может ли кто-нибудь пролить свет на то, когда мне следует использовать относительные ссылки (например, ../images/banner_tinga.jpg) по сравнению с тильдой (например, ~ / images / banner_tinga.jpg). В зависимости от ситуации вы можете достичь той же цели, используя любой из них. Каковы плюсы и минусы каждого механизма? Одним из аргументов в пользу относительной ссылки, по-видимому, является неприязнь Visual Studio во время разработки к ресурсам, на которые указывает тильда. Всякий раз, когда я ссылаюсь на файл css, почему он указывает, что он не может быть найден.
С уважением, javacavaj





Лично я сейчас использую только относительные ссылки и избегаю тильды. Это может привести к проблемам в дальнейшем. Хотя я не могу показать какой-либо связанный с ним справочный материал, я помню, что где-то слышал / читал, что ссылки с тильдой устарели
Тильда будет работать только с элементами управления, имеющими атрибут runat = "server", и не будет работать со стандартными элементами управления HTML. Так что универсального выбора действительно нет. Если вы хотите использовать тильду с элементами управления HTML, вам нужно будет пометить их как runat = "server", как это
<img src = "~/images/myimage.png" runat = "server">
Но это не похоже на хорошую практику, потому что он будет добавлен в состояние просмотра. Но тогда вы также можете сделать это
<img src = "~/images/myimage.png" runat = "server" EnableViewState = "False">
Так что тогда выбор становится поистине универсальным.
Теперь отвечу на ваш исходный вопрос:
Я думаю, что лучше использовать тильду «~», потому что она дает вам ориентир - корень вашего веб-сайта. Схема относительного пути "../" не сработает, если вы измените папку веб-страницы и перейдете на другой уровень (выше или ниже в иерархии).
Надеюсь, это помогло.
Чтобы перейти к вашему файлу CSS, сделайте следующее
<link href = "<%= VirtualPathUtility.ToAbsolute("~/css/style.css/") %>" type = "text/css">
Что ж, это может создать проблему, если у вас есть около 100 элементов управления, потому что обратная передача займет больше времени. Это беспорядок, если вы используете updatePanels и ASP.Net ajax, потому что все состояние просмотра будет передано. Вот почему я предлагаю установить для него значение false для определенных элементов управления :)
Хммм ... Я полностью не согласен с @StevenMcD. Тильда всегда указывает на корень разрабатываемого веб-приложения, тогда как обозначение относительного пути основано на вашем текущем местоположении в веб-приложении. Я думаю, что в конечном итоге, если вы реорганизуете или реструктурируете расположение файлов на веб-страницах, обозначение тильды значительно упростит вам рефакторинг, поскольку вы всегда знаете, что базовый путь (~) относится к корню веб приложение. Вы не можете быть уверены в этом, используя обозначение "../".
Еще одно замечание ... обозначение тильды (~) очень удобно при использовании пользовательских элементов управления и мастер-страниц в ASP.NET. Когда вы вставляете пользовательский элемент управления в веб-форму, эта веб-форма может быть вложена в любую часть файловой структуры вашего приложения. Относительные пути просто не гарантированно работают в этом сценарии. Используя обозначение тильды, все пути могут быть записаны в коде и будут работать, потому что они основаны на корне веб-приложения. Надеюсь это поможет.
Кстати, использование символа ~ никоим образом не считается устаревшим в ASP.NET.
ОБНОВЛЕНИЕ: как упоминал Кирилл, ~ доступен только при использовании элементов управления ASP.NET. Чистые HTML-элементы с ним работать не будут.
Кирилл, отличный ответ, но я должен отметить одну вещь. Я не вижу ничего плохого (или плохого) в использовании viewstate с ASP.NET. Вам просто нужно осознавать тип приложения, которое вы создаете, и количество пользователей. В большинстве случаев это не проблема.