3

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

search.Master 是一个嵌套母版页,它位于 main.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" />

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

~/mp/css/master.search.css

内嵌的

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

有谁知道为什么会这样?以及如何解决这个问题?

PS:我不想使用 <%= ResolveClientUrl("bla bla bla") %>,因为它弄乱了 masterrepage/theme 关系。而且我不希望在 ServerSide 代码的标头中插入 CSS 样式表。

4

3 回答 3

3

它发生的原因是因为 ASPX 处理器将其转换为 GenericControl,除非它位于头部区域中,然后将其转换为 HtmlLink 控件。

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

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

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

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

于 2009-10-30T20:25:06.050 回答
0

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

于 2009-10-30T20:46:38.737 回答
0

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

<link href="../../res/css/styleForThisParticularMasterPage.css" rel="stylesheet" type="text/css" />
于 2009-10-30T21:12:32.350 回答