我使用以下样式来确保无论当前页面的URL是什么,所有脚本文件总是被加载,即呈现正确的URL。
<script src='<%= ResolveUrl("~/Scripts/jquery-1.4.1.js")%>' type="text/javascript" />
然而,当我尝试使用样式表的类似方法时,如下所示,将呈现实际代码。
<link href='<%= ResolveUrl("~/Styles/Blueprint/src/reset.css") %>' rel="stylesheet" type="text/css" />
为什么会这样,我怎样才能实现我的目标,但未能使用第二个例子?
答案 0 :(得分:1)
这可能是因为你的head元素已经应用了runat =“server”属性。
我可以通过以下方式重新创建问题:
<head runat="server">
<link href='<%= ResolveUrl("~/Styles/Blueprint/src/reset.css") %>' rel="stylesheet" type="text/css" />
</head>
删除该属性后,它会按预期解析URL。
修改强>
似乎头元素被定义为作为服务器控件运行,然后其中的元素也可以被后面的代码访问,而不需要将它们标记为服务器控件。
例如:
<link id="link1" href='<%= ResolveUrl("~/Styles/Blueprint/src/reset.css") %>' rel="stylesheet" type="text/css" />
可以作为HtmlLink控件从后面的代码访问,即使它没有使用runat =“server”属性标记。
这解释了你在href属性中看到的代码,因为它是一个服务器控件属性,它将它视为文字文本。
奇怪的是title元素的行为方式相同,并且在后面的代码中可以作为HtmlTitle对象使用,但脚本标记不是,并且需要在它变为可见之前显式定义为runat =“server背后的代码。
据我所知,你有两种选择:
1 - 直接设置href属性:
<link rel="stylesheet" type="text/css" href="~/Styles/Blueprint/src/reset.css" />
这与使用Page.ResolveClientUrl具有相同的效果,并将解析样式表相对于页面的URL:
<link href="Styles/Blueprint/src/reset.css" rel="stylesheet" type="text/css" />
或者
2 - 将您的链接元素定义为服务器控件(无论如何):
<link id="link1" runat="server" rel="stylesheet" type="text/css" />
并在后面的代码中设置网址:
link1.Href = ResolveUrl("~/Styles/Blueprint/src/reset.css");
这解析了URL链接:
<link id="link1" rel="stylesheet" type="text/css" href="/Styles/Blueprint/src/reset.css" />
希望这有帮助。
答案 1 :(得分:0)
我发现以下方法效果很好,而且我认为它还可以提供更整洁的<head>
标记:
<head id="Head1" runat="server">
<title>Lightstone AVM</title>
<style type="text/css">
@import '<%# ResolveUrl("~/Styles/Blueprint/src/reset.css")%>';
@import '<%# ResolveUrl("~/Styles/Blueprint/src/grid.css")%>';
@import '<%# ResolveUrl("~/Styles/Site.css")%>';
@import '<%# ResolveUrl("~/Styles/Master.css")%>';
@import '<%# ResolveUrl("~/Styles/Nav.css")%>';
</style>
</head>
请注意使用数据绑定表达式而不是代码渲染块。这是遵循Milan Negovan的Code Blocks Inside Master Pages Cause Trouble文章中的建议,该文章很好地处理了这个奇怪的问题。
NB :此方法确实需要为您的母版页提供以下最小代码:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Parent.DataBind()
DataBind()
End Sub