Вложенные мастер-страницы и CSS-файлы - PullRequest
3 голосов
/ 30 октября 2009

У меня есть две шедевры. Основное. Мастер и поиск. Мастер.

search.Master - это вложенная главная страница, которая находится "внутри" основного. Master. Чтобы мои CSS-файлы работали с мастер-страницами, мне пришлось разместить атрибут runat = "server". Как это:

<link runat="server" href="~/mp/css/master.main.css" rel="stylesheet" type="text/css" />

И прекрасно работает на главной странице. Однако эта вложенная главная страница имеет свои собственные стили, поэтому я попытался снова выполнить трюк runat = "server". Я убедился, что мой asp: content был внутри, и набрал:

<link runat="server" href="~/mp/css/master.search.css" rel="stylesheet" type="text/css" />

Однако, когда я проверял исходный код моего сайта, путь показывался там:

~ / тр / CSS / master.search.css

Стелька из

.. / .. / тр / CSS / master.search.css

Кто-нибудь знает, почему это происходит? И как это решить?

PS: я не хочу использовать <% = ResolveClientUrl ("bla bla bla")%>, потому что он мешает отношениям mastrepage / theme И я бы предпочел не вставлять таблицы стилей CSS в заголовок из кода ServerSide.

Ответы [ 3 ]

3 голосов
/ 30 октября 2009

Причина, по которой это происходит, заключается в том, что процессор ASPX преобразует его в GenericControl, если он не находится в области заголовка, а затем преобразует его в элемент управления HtmlLink.

Для общих элементов управления он устанавливает href в качестве атрибута. HtmlLink имеет свойство Href, которое используется и разрешает URL.

Единственное решение, которое я могу придумать, - это

  1. <%=ResolveUrl("blah")%> или <%=ResolveClientUrl("blah")%>

  2. Создайте пользовательский элемент управления, который отображает ссылку и разрешает URL-адрес одним из указанных выше способов.

0 голосов
/ 31 октября 2009

Если все ваши объявления CSS находятся внутри тега head (либо напрямую, либо через элемент управления ContentPlaceHolder), то все, что вам нужно сделать, это указать ваши CSS-ссылки относительно расположения главной страницы. URL-адреса должны автоматически перебазироваться в правильные места. Вам не нужен атрибут runat, и вам не нужно добавлять ~. В моем случае это код, который у меня есть на главных страницах:

<link href="../../res/css/styleForThisParticularMasterPage.css" rel="stylesheet" type="text/css" />
0 голосов
/ 30 октября 2009

Я вижу проблему, с которой вы столкнулись. Единственный обходной путь, который я мог найти, - это создать объект System.Web.UI.HtmlControls.HtmlLink в коде позади, установить свойство Href и атрибут rel (и любые другие необходимые атрибуты) и добавить его в элементы управления для Голова ContentPlaceHolder.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...