2010-01-28 3 views
4

Я программирую впервые в ASP.NET. Это оказалось очень легко, и я действительно наслаждаюсь этим. Одна из особенностей, которые мне нравятся, заключается в том, что на веб-странице я могу ссылаться на файлы из root, используя символ тильды (~), а затем остальную часть пути. Однако это не кажется последовательным. Например, он работает в контексте href, например.Confused by ~ in ASP.NET

<link href="~/css/StyleSheet.css" /> 

Это не работает в отношении src, например.

<img src="~/images/header.jpg" /> 

Почему это? Я что-то делаю неправильно. Несоответствие раздражает.

+0

Оператор ~ будет работать как для управления HTML, так и для сервера, если вы также включите атрибут runat = "server". В этом смысле принятый ответ ниже не совсем корректен. – IrishChieftain

+0

@IrishChieftain - в каком смысле есть элемент управления HTML с runat = "server", а не на сервере? – jball

+0

Я пытался сказать, что добавление runat = "server" в элемент управления HTML (что делает его серверным) БЕЗ оператора "~", возможно, не работает. Я буду исправлен, если я ошибаюсь :-) – IrishChieftain

ответ

7

Из моего опыта трюк ~ работает только в серверных элементах управления. Если ваш img имеет runat="server", это должно исправить его.

+0

Спасибо за ваш ответ. Разве это действительно хорошая идея, имея все серверы runat? Для меня это похоже на то, что это будет обременять сервер. (В любом случае ответ помечен как принятый.) – JasCav

+0

yese, используйте теги сервера с осторожностью, и везде, где вы можете использовать html-теги (без runat = server), зайдите на него. И если вы используете элементы управления html/server в пользовательских элементах управления, не включайте свои таблицы стилей в usercontrol, включите их на родительскую страницу, которая будет потреблять пользовательский элемент управления – ram

+0

@ Джейсон: Нет, это не очень хорошо иметь * все * runat = сервер. ASP.Net обрабатывает большое количество элементов управления, но чем меньше он должен разбираться, тем лучше. Кроме того, серверные элементы управления могут добавлять разметку или изменять разметку, и, хотя у вас есть контроль над изменением ее с помощью файлов .browser и т. П., Вы получаете гораздо больше контроля с необработанным HTML. – Broam

3

ASP.NET Web Site Paths

Чтобы преодолеть эти недостатки, ASP.NET включает в себя веб-приложение корневого оператора (~), который вы можете использовать при определении пути в сервере управления. ASP.NET разрешает оператор ~ корню текущего приложения . Вы можете использовать оператор ~ в сочетании с папками , чтобы указать путь, основанный на текущем корневом .

...

Вы можете использовать оператор ~ в любом пути, связанные с собственностью на сервере управления. Оператор ~ распознается только для серверных элементов управления и на сервере . Вы не можете использовать оператор ~ для клиентских элементов.