嵌套母版页和 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。
我能想到的唯一解决方案是:
<%=ResolveUrl("blah")%>
或<%=ResolveClientUrl("blah")%>
创建一个自定义控件,使用上述方法之一呈现链接并解析 url。
【讨论】:
以上是关于嵌套母版页和 CSS 文件的主要内容,如果未能解决你的问题,请参考以下文章