C# 母版页和页面内容使用相同的CSS文件

C# 母版页和页面内容使用相同的CSS文件,c#,asp.net,css,master-pages,C#,Asp.net,Css,Master Pages,我有一个APS.net应用程序(C#),其中有几个页面使用同一母版页。在该页面中,我包含了两个样式表,如下所示: <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" /> <

我有一个APS.net应用程序(C#),其中有几个页面使用同一母版页。在该页面中,我包含了两个样式表,如下所示:

<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主题包含在所有页面中

更新

<head runat="server">
    <link rel="stylesheet" type="text/css" href="../css/style.css" />
</head>
为了排除文件位置问题,我使用了这些样式表的绝对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" />

这样,无论从何处读取,都可以找到该文件。这仍然表现出相同的行为

对我来说,母版页似乎是用CSS样式呈现的(因为它们在同一个文件中),然后子/调用页在没有CSS样式的情况下呈现(因为它们不在该文件中,它们在母版页中),然后这两个文件组合在一起(而不是先将它们组合在一起,然后呈现组合页面的样式元素)。我之前的例子是在调用页面本身中添加CSS文件的include,这将使它正确显示CSS

您可以查看此文件的源代码,在head部分,您可以看到正确链接的CSS样式,但它们不会应用于调用页中的任何元素,而会应用于母版页中的所有元素。

这是怎么回事

<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" />


看起来您的操作是正确的,因此您的错误看起来很奇怪,听起来可能是您在母版页中输入了错误。请查看生成的源代码(在浏览器中查看源代码)在两个页面中,一个包含母版页中的链接,另一个包含网页中的链接,并比较路径。

类似的方法应该可以工作。您应该能够在母版的标题中包含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>


标记,则可能会覆盖母版页标题。

内容页是否位于母版页使用的其他文件夹中?如果是,则必须获取母版页中使用的css文件的应用程序相对路径:

<link href='<%= ResolveUrl("~/apps/_lib/ui/styles1.css") %>' type="text/css" rel="stylesheet" />


更新:如果这不起作用,那么您可能会出现Lance建议的HTML或CSS错误。请尝试使用w3schools.com上的。如果在修复任何错误后仍然不起作用,请按照Steve的建议使用呈现的HTML重新检查CSS选择器。ASP.Net生成的ID不止一次地攻击了我。

jrummell发布的内容就是我使用的内容在我的网站,以确保链接的工作,如果我要移动我的网页

至于渲染。渲染是在客户端计算机的浏览器上完成的。对于浏览器,它不知道html是从多个文档生成的

我会确保你的HTML和CSS是正确的

顺便说一句,我注意到上周左右,VS2008一直在搞乱我的css样式表,做一些非常随机的事情,比如移动文本。然而,我认为这可能只是我机器上的一些东西。只是需要检查一下

下面是一些示例代码,我检查了这些代码,以确保它们能够正常工作

母版页标题

<head runat="server">
    <link rel="stylesheet" type="text/css" href="../css/style.css" />
</head>

结果是子页面中出现蓝色的“Lance”。

可能是您的css选择器。当您添加母版页时,asp.net会在ID中添加更多前缀。

我遇到了类似的问题。正如其他人所建议的,您应该能够使用ResolveUrl确保路径正确

不幸的是,这给我带来了进一步的问题。我的头标签在服务器上运行。我的链接标签没有运行。 我的link标记中的resolve url永远不会执行。相反,C#code和response.write标记被编码并输出到页面

奇怪的是,在脚本(非runat服务器)标记中使用相同的技术也可以正常工作

为了解决这个问题,我最终在ASP.Net响应中写入了整个链接标记。写入标记:

<%="<link href='" + ResolveUrl("~/apps/_lib/ui/styles.css") + "' rel='stylesheet' type='text/css' />"%>

成功了。
真奇怪。不知怎的,这一切都与头标签在服务器上运行有关。

我认为jrummell可能是一对什么。母版页链接中的css样式应该应用于contentpage。我认为可能也是这样,所以我尝试将它们移动到同一个目录,但我仍然遇到同样的问题。当我这样做时。。。我在HTML中呈现为这样…这不起作用。这很奇怪,它对我起作用。你的链接是否在头部中与runat=“server”?我同意这很奇怪。我确实包含了runat=“server”在head标签中。不,对不起…没有什么区别。用一个新的标签和css类验证了这一点,它起了作用。更仔细地查看css,发现错误的css类显示了错误消息(考虑到两个类的命名有多接近,这是一个很容易犯的错误)。现在似乎起作用了,我重命名了东西。
<%="<link href='" + ResolveUrl("~/apps/_lib/ui/styles.css") + "' rel='stylesheet' type='text/css' />"%>