我有一个APS.net应用程序(C#),其中有几个页面使用相同的MasterPage。在那个页面中,我已经包含了几个样式表:
<head runat="server">
<link href="/apps/_lib/ui/styles1.css" type="text/css" rel="stylesheet" />
<link href="/apps/_lib/ui/styles2.css" type="text/css" rel="stylesheet" />
</head>
这些样式适用于实际.master文件(页面)中的所有内容,但不适用于使用母版页的任何页面(例如,default.aspx使用该母版页并且内容中包含内容占位符它)。
如果我在每个页面中添加这些行:
<link href="/apps/_lib/ui/styles1.css" type="text/css" rel="stylesheet" />
<link href="/apps/_lib/ui/styles2.css" type="text/css" rel="stylesheet" />
然后样式按预期显示......但我希望我可以将它们包含在母版页中,这样我就不需要在每个后续页面中包含这些引用。
因为这些文件并非物理上位于同一个项目中(它们在多个应用程序之间共享),所以我不能将它们包含在将应用于所有页面的ASP.net主题中。
更新
为了排除文件位置问题,我使用了这些样式表的绝对URL ......
<link href="https://myserver/apps/_lib/ui/styles1.css" type="text/css" rel="stylesheet" />
<link href="https://myserver/apps/_lib/ui/styles2.css" type="text/css" rel="stylesheet" />
这样,无论从哪里读取,都可以找到该文件。这仍然表现出相同的行为。
对我来说,看起来masterPage是使用CSS样式呈现的(因为它们位于同一个文件中),然后在没有CSS样式的情况下呈现子/调用页面(因为它们不在该文件中,它们在masterPage中)然后将这两个文件组合在一起(而不是先将它们组合在一起,然后再渲染组合页面的样式元素)。我之前的例子是在调用页面中添加CSS文件的include,这将使它正确地显示CSS。
您可以查看此文件的来源,在head部分中,您可以看到正确链接的CSS样式,但它们不适用于调用页面中的任何元素,同时它们应用于masterPage中的所有元素
答案 0 :(得分:4)
内容页面是否与主人不同?如果是这样,您将必须使用母版页中的ResolveUrl获取css文件的应用程序相对路径:
<link href='<%= ResolveUrl("~/apps/_lib/ui/styles1.css") %>' type="text/css" rel="stylesheet" />
更新:如果这不起作用,那么您可能会遇到像Lance建议的HTML或CSS错误。尝试使用w3schools.com上的HTML and CSS validators。如果在修复任何错误后仍然无法正常工作,请使用呈现的HTML仔细检查CSS选择器,如Steve建议的那样。 ASP.Net生成的ID不止一次咬过我。
答案 1 :(得分:1)
这个怎么样?
<link runat="server" href="~/apps/_lib/ui/styles1.css" type="text/css" rel="stylesheet" />
<link runat="server" href="~/apps/_lib/ui/styles2.css" type="text/css" rel="stylesheet" />
答案 2 :(得分:1)
jrummell发布的内容是我在我的网站上使用的内容,以确保在我移动网页时链接有效。
至于渲染。渲染在客户端计算机的浏览器上完成。对于浏览器,它不知道html是从多个文档生成的。
我会确保你的HTML和CSS是正确的。
另一方面,我注意到上周左右,VS2008一直在弄乱我的css样式表,做一些随意的事情,比如移动文字。但是,我认为这可能只是我机器上的东西。只是要检查一下。
以下是我检查过的一些示例代码,只是为了确保这一点。
母版主页
<head runat="server">
<link rel="stylesheet" type="text/css" href="../css/style.css" />
</head>
内容持有人
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<div class="something">
Lance
</div>
</asp:Content>
样式表中的Css
.something{
color:Blue;
}
结果是子页面中的蓝色“Lance”。
答案 3 :(得分:1)
也许它可能是你的css选择器。当您添加母版页时,asp.net会为更多的ID添加前缀。
答案 4 :(得分:1)
我有类似的问题。正如其他人所建议的那样,您应该能够使用ResolveUrl来确保路径正确。
不幸的是,这给我带来了另一个问题。我的头标签是runat服务器。我的链接标签不是。 我的链接标记中的解析网址永远不会执行。相反,C#代码和response.write标签正在编码并输出到页面。
奇怪的是,脚本(非runat服务器)标记中的相同技术可以正常工作。
为了解决这个问题,我最终在ASP.Net Response.Write标记中编写了整个链接标记:
<%="<link href='" + ResolveUrl("~/apps/_lib/ui/styles.css") + "' rel='stylesheet' type='text/css' />"%>
那很有用。 多么奇怪。不知何故,它都与head标签是runat sever相关。
答案 5 :(得分:0)
看起来你已经正确地完成了它,所以你的错误看起来很奇怪,听起来好像你可能在主页中输入错误。尝试查看两个页面中生成的源(浏览器中的视图源),一个包含母版页中的链接,另一个包含网页中的链接,并比较路径。
答案 6 :(得分:0)
这样的事情应该有效。您应该能够将CSS包含在主服务器的标头中。然后,在标题中包含ContentPlaceHolder,这样如果您在内容页面中需要自定义标题内容,则可以执行此操作。这不起作用吗?
<head>
<link href="/apps/_lib/ui/styles1.css" type="text/css" rel="stylesheet" />
<link href="/apps/_lib/ui/styles2.css" type="text/css" rel="stylesheet" />
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
</head>
最终你不需要
<head></head>
在您的内容页面中的标记,可能会覆盖您的母版页标题。