嵌套的主页和CSS文件

时间:2009-10-30 19:41:30

标签: c# asp.net css master-pages relative-path

我有两个主页。一个main.Master和一个search.Master。

search.Master是一个嵌套的母版页,它位于main.Master的“内部”。 为了让我的CSS文件与masterpages一起工作,我不得不放置runat =“server”属性。像这样:

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

并且在主页上工作得非常好。 但是,这个嵌套的母版页有自己的样式,所以我尝试再次使用runat =“server”技巧。我确保我的asp:内容位于并输入:

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

但是,当我查看我网站的源代码时,显示的路径是:

〜/ MP / CSS / master.search.css

代替

../../ MP / CSS / master.search.css

任何人都知道为什么会这样吗?以及如何解决这个问题?

PS:我不想使用&lt;%= ResolveClientUrl(“bla bla bla”)%&gt;,因为它正在使用mastrepage / theme关系搞乱。 我宁愿不在ServerSide代码的头文件中插入CSS样式表。

3 个答案:

答案 0 :(得分:3)

之所以发生这种情况,是因为ASPX处理器将其转换为GenericControl,除非它位于head区域,然后将其转换为HtmlLink控件。

对于通用控件,它将href设置为属性。 HtmlLink具有使用的Href属性,将解析URL。

我能想到的唯一解决方案是:

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

  2. 创建一个自定义控件,使用上述方法之一呈现链接并解析网址。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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