嵌套母版页和 CSS 文件

Posted

技术标签:

【中文标题】嵌套母版页和 CSS 文件【英文标题】:Nested Masterpages and CSS files 【发布时间】:2010-12-11 17:37:52 【问题描述】:

我有两个母版页。一个 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:我不想使用 ,因为它搞乱了 masterrepage/theme 关系。 而且我不希望在服务器端代码的标题中插入 CSS 样式表。

【问题讨论】:

我不是 ASP.NET 开发人员,但你为什么放 #runat="server" ??? 添加 runat="server" 允许在将链接发送到客户端之前解析服务器端 你确定你知道 "runat='server'" 属性的用途是什么? 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

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

    &lt;%=ResolveUrl("blah")%&gt;&lt;%=ResolveClientUrl("blah")%&gt;

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

【讨论】:

以上是关于嵌套母版页和 CSS 文件的主要内容,如果未能解决你的问题,请参考以下文章

母版页中的 ASP.NET CSS 文件

ASP.NET Web 窗体:母版页和 CSS 文件 [关闭]

ASP.Net 母版页和文件路径问题

ASP.Net,母版页:每页样式表

为啥我的嵌套母版页会丢失 CSS 格式?

C#.net web开发,母版页和内容页加载的顺序