我有两个主页。一个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样式表。
答案 0 :(得分:3)
之所以发生这种情况,是因为ASPX处理器将其转换为GenericControl,除非它位于head区域,然后将其转换为HtmlLink控件。
对于通用控件,它将href设置为属性。 HtmlLink具有使用的Href属性,将解析URL。
我能想到的唯一解决方案是:
<%=ResolveUrl("blah")%>
或<%=ResolveClientUrl("blah")%>
创建一个自定义控件,使用上述方法之一呈现链接并解析网址。
答案 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" />