2009-10-30 27 views
3

我有两个主页。一个主要的硕士和一个search.Master。嵌套的主页和CSS文件

search.Master是一个嵌套的masterpage,它是main.Master中的“内部”。 为了让我的CSS文件能够与masterpages一起工作,我必须放置runat =“server”属性。像这样:

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

并且正在主页上工作得很好。 但是,这个嵌套的masterpage有她自己的样式,所以我试图再次执行runat =“server”技巧。我确信,我的ASP:内容在里面的和类型:

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

然而,当我检查了我的网站的源代码,显示的路径有:

〜/ MP/CSS /主.search.css

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

任何人的Insetead知道为什么发生这种情况?以及如何解决这个问题?

PS:我不想使用<%= ResolveClientUrl(“bla bla bla”)%>,因为它与mastrepage/theme关系陷入混乱。 而且我不希望从ServerSide代码的头部插入CSS样式表。

+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. 创建呈现的链接并解决使用中的一个链接的自定义控制以上方法。

0

我看到您遇到的问题。我能想出的唯一解决方法是在后面的代码中创建一个System.Web.UI.HtmlControls.HtmlLink对象,设置Href属性和rel属性(以及任何其他您想要的属性)并将其添加到控件中头ContentPlaceHolder。

0

如果您的所有CSS声明都位于head标签的内部(直接或通过ContentPlaceHolder控件),那么您只需指定CSS链接相对于母版页的位置即可。这些网址应该自动重新发布到正确的位置。你不需要runat属性,也不需要添加〜。 在我而言,这是我的代码在我的母版页:

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