2009-10-30 4 views
3

У меня есть два мастер-листа. Основной.Мастер и поиск.Мастер.Вложенные файлы Masterpages и CSS

Поиск.Мастер - это вложенная главная страница, которая является «внутри» main.Master. Чтобы мои файлы CSS работали с masterpages, мне пришлось поместить атрибут runat = "server". Например:

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

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

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

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

~/тр/CSS/мастер .search.css

Insetead из

../../mp/css/master.search.css

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

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

+0

я не являюсь разработчиком ASP.NET, но почему вы кладете # RUNAT = «сервер» ??? – tawfekov

+0

Добавление runat = "server" позволяет разрешить ссылку на серверную сторону перед отправкой ее клиенту. – mxmissile

+0

Вы уверены, что знаете, что является целью атрибута «runat = 'server'? – Kamarey

ответ

3

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

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

Единственное решение я могу думать с верхней части моей головы:

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

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

0

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

0

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

<link href="../../res/css/styleForThisParticularMasterPage.css" rel="stylesheet" type="text/css" />