将样式应用于母版页中的嵌套页面

问题描述 投票:2回答:6

为什么我无法在使用母版页的嵌套页面上应用样式?我只是想在单个页面中将简单的某些背景色应用于正文和某些div。

我的(嵌套)页面Reservations.aspx具有此代码

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" 
AutoEventWireup="true" CodeFile="Reservations.aspx.cs" Inherits="Reservations" %>
<asp:Content runat="server" ContentPlaceHolderID="HeadContent">
    <link href="~/Styles/input.css" rel="stylesheet" type="text/css" />
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<div class="mainDiv">
........
</div></asp:Content>

input.cs具有此代码

body { background-color:Silver; }
.mainDiv { background-color:Blue; }

Site.Master具有此代码

<head runat="server">
<asp:ContentPlaceHolder ID="HeadContent" runat="server"></asp:ContentPlaceHolder>
<link href="~/Styles/Site.css" rel="stylesheet" type="text/css" /></head>
<body>.........

仅当我将其应用于不需要的母版页时,才能将银色作为Reservations.aspx的背景。我无法从This question和教程的可接受答案中获得帮助。


之前或之后使用<link..可能会有所不同,感谢您提供信息,但是在这种情况下它没有做任何事情。解决问题后,我已经对两种方法都进行了测试。

指导ResolveUrl解决了我的问题,因为我尝试在pickurl中使用visual-studio 2010而不是手动输入,并获得了该URL Styles/input.css而不是~/Styles/input.css

我的问题解决了。怎么样?我告诉过,但是为什么呢?我不能说。我可能认为~/Styles/Site.cssStyles/Site.cssStyles/input.css都是正确的网址,但~/Style/input.css不正确。为什么?这仍然是开放的,其答案肯定是真实的和可接受的答案。

asp.net css master-pages site.master
6个回答
6
投票

您需要按如下方式使用解析网址。

<%= ResolveUrl("~/")%>

如下

<link href='<%= ResolveUrl("~/Styles/Site.css")%>'  rel="stylesheet" type="text/css" />

Master PageContent Page在同一文件夹中时,可以正常使用主页中的所有文件。

但是当Master PageContent Page位于不同的文件夹中时,将不会找到相同的样式表或Java脚本文件,因为files不在同一文件夹中。

因此,解析URL解析服务器上的URL。


1
投票

更新-

要特别注意的是<body>标签是其余标签的容器。您的子页面是您身体标签的一部分。我看到您正在尝试根据子页面指定body标签的背景,但是NO这是不可能的。因为即使您尝试下载特定于您的子页面的css,所有内容都进入head标签,所以只有<body>的最后一个指定css规则有效。另一方面,子页面元素不是这种情况,因为它们对于您的子页面是唯一的。


这是因为Site.css的样式属性覆盖了input.css的属性。

这是在浏览器中呈现最终代码的方式-

<asp:ContentPlaceHolder ID="HeadContent" runat="server"> //Master page's markup

    <!-- <asp:Content runat="server" ContentPlaceHolderID="HeadContent"> --> //child page markup
          <link href="~/Styles/input.css" rel="stylesheet" type="text/css" />
    <!-- </asp:Content> -->

</asp:ContentPlaceHolder>
<link href="~/Styles/Site.css" rel="stylesheet" type="text/css" /></head> //Master page's markup (the css of Site.css should be overriding your input.css)

1
投票

尝试一下

<head runat="server">

<link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />
<asp:ContentPlaceHolder ID="HeadContent" runat="server"></asp:ContentPlaceHolder>

</head>
<body>

<link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />之后放入ContentPlaceHolder

[我猜,您的样式表正在应用,但是由于site.css是本质或CSS,因此它被覆盖。因为当页面将呈现时,您将获得input.css链接标记及其后的site.css链接标记。

因此,作为Css规则,如果site.css在先前的css文件中也具有相同选择器的css规则,则最后一个规则将适用。

<link href='<%= ResolveUrl("~/Styles/input.css")' rel="stylesheet" type="text/css" /> 

您的Reservations.aspx中正在解决您的问题。

当您使用href="~/Styles/input.css"时,当我们将资源相对于我们的网站或Web应用程序根目录使用时,此URL很有用。以~开头的url定义该URL为根级别url。但只有在服务器端无法呈现此路径时,它才会以正确的路径呈现。

要在服务器端进行渲染,您可以使用ID链接到runat="server"。或在服务器端定界符中使用ResolveUrl方法。

like

<link href="~/Styles/input.css" rel="stylesheet" type="text/css" id="l1" runat="server" />

<link href='<%= ResolveUrl("~/Styles/input.css") %>' rel="stylesheet" type="text/css" />

1
投票

移动线:

<asp:ContentPlaceHolder ID="HeadContent" runat="server"></asp:ContentPlaceHolder>

以下:

<link href="/Styles/Site.css" rel="stylesheet" type="text/css" /></head>

以便您的site.aster读取

<link href="/Styles/Site.css" rel="stylesheet" type="text/css" /></head>
<asp:ContentPlaceHolder ID="HeadContent" runat="server"></asp:ContentPlaceHolder>

这样,页面中的样式表将被读取为主要样式,并且将覆盖其中的所有设置。但是,我希望只使用一个主样式表,然后将id和class用于特定的样式需求。

** 编辑以补充最后的问题

**asp.net中的波浪号~是相对于应用程序的路径根的符号...

因此,如果您从“ /stuff/images/somepage.aspx”调用文件,则即使引用“〜/ css / style.css”也会调用“ /css/style.css”,无论-如果您只是调用“ css / style.css”,它将尝试找到相对于当前文档的文件,即“ /stuff/images/css/style.css”。

但是~字符仅在ASP.NET代码中有效,因此带有HTML符号的字符毫无意义-仅当您在response.write<%= %>Resolve或后面的代码中使用它时,任何意义。

My

trick

是在这些路径上使用斜杠,所以“ /css/style.css”因为这将始终从URL的根引用文件-只要您不将其部署到子目录,它将起作用。


0
投票
您应该检查浏览器中的url渲染是否正确,如果不正确,请尝试在Reservations.aspx页面中使用<link href='<%= ResolveUrl("~/Styles/input.css")' rel="stylesheet" type="text/css" />解决您的问题。
© www.soinside.com 2019 - 2024. All rights reserved.