为啥应用于 bootstrap.css 的更改在发布时不起作用,但在 localhost 上起作用?

Posted

技术标签:

【中文标题】为啥应用于 bootstrap.css 的更改在发布时不起作用,但在 localhost 上起作用?【英文标题】:Why do changes applied to bootstrap.css not work when published but do work on localhost?为什么应用于 bootstrap.css 的更改在发布时不起作用,但在 localhost 上起作用? 【发布时间】:2019-12-29 15:59:05 【问题描述】:

我正在 Visual Studio 2017 版本 15.2 (26430.16) 和 Microsoft .NET Framework 版本 4.7.03056 中构建一个 asp.net 网站 (webforms)。 (targetFramework .NET = 4.5.2)。

在创建解决方案时,会创建 bootstrap.css 文件以及 Site.master 等。

当我编辑 bootstrap.css 文件时,我可以看到在 localhost 上查看网站时发生的变化。但是在发布到我的主机后,它似乎没有将这些更改应用到实时网站。

我的“Site.master”页面的一部分:

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="Site.master.cs" Inherits="SiteMaster" %>

<!DOCTYPE html>

<html lang="en">
<head runat="server">
    <title>CompanyX | <%: Page.Title %></title>

    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="keywords" content="CompanyX, ..." class="next-head" />
    <meta name="author" content="CompanyX" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />

    <meta property="og:title" content="CompanyX" />
    <meta property="og:description" content="..." />

    <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />

    <asp:PlaceHolder runat="server">
        <%: Scripts.Render("~/bundles/modernizr") %>
    </asp:PlaceHolder>

    <webopt:bundlereference runat="server" path="~/Content/css" />

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

<body>
    <form runat="server">
        <asp:ScriptManager runat="server">
            <Scripts>
                <%--To learn more about bundling scripts in ScriptManager see https://go.microsoft.com/fwlink/?LinkID=301884 --%>
                <%--Framework Scripts--%>
                <asp:ScriptReference Name="MsAjaxBundle" />
                <asp:ScriptReference Name="jquery" />
                <asp:ScriptReference Name="bootstrap" />
                <asp:ScriptReference Name="respond" />
                <asp:ScriptReference Name="WebForms.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebForms.js" />
                <asp:ScriptReference Name="WebUIValidation.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebUIValidation.js" />
                <asp:ScriptReference Name="MenuStandards.js" Assembly="System.Web" Path="~/Scripts/WebForms/MenuStandards.js" />
                <asp:ScriptReference Name="GridView.js" Assembly="System.Web" Path="~/Scripts/WebForms/GridView.js" />
                <asp:ScriptReference Name="DetailsView.js" Assembly="System.Web" Path="~/Scripts/WebForms/DetailsView.js" />
                <asp:ScriptReference Name="TreeView.js" Assembly="System.Web" Path="~/Scripts/WebForms/TreeView.js" />
                <asp:ScriptReference Name="WebParts.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebParts.js" />
                <asp:ScriptReference Name="Focus.js" Assembly="System.Web" Path="~/Scripts/WebForms/Focus.js" />
                <asp:ScriptReference Name="WebFormsBundle" />
                <%--Site Scripts--%>
            </Scripts>
        </asp:ScriptManager>

        <div class="navbar navbar-inverse navbar-fixed-top">
            <%-- navbar css styling is done in the 'bootstrap.css' file --%>
            <div class="container">
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                    <a class="navbar-brand" runat="server" href="~/">
                        <asp:Image ID="logo" runat="server" ImageUrl="~/images/logo.png" AlternateText="logo" style="width:15%; height:auto;"></asp:Image>
                        <span>CompanyX</span>
                    </a>
                </div>
                <div class="navbar-collapse collapse">
                    <ul class="nav navbar-nav">
                        <li><a runat="server" href="~/About">About</a></li>
                        <li class="dropdown">
                            <a class="dropdown-toggle" data-toggle="dropdown" runat="server" href="#">Products<span class="caret"></span></a>
                            <ul class="dropdown-menu">
                                <li><a runat="server" href="~/Product-1">Product-1</a></li>
                                <li><a runat="server" href="~/Product-2">Product-2</a></li>
                            </ul>
                        </li>
                        <li><a runat="server" href="~/Photos">Photos</a></li>
                        <li><a runat="server" href="~/Contact">Contact</a></li>
                    </ul>
                </div>
            </div>
        </div>

        <div class="container body-content">
            ...
        </div>

    </form>
</body>

我在“bootstrap.css”文件中应用的更改:

.navbar-nav > li > a 
    margin-top: 10px;
    padding-top: 10px;
    padding-bottom: 10px;
    line-height: 20px;
    font-size: medium;

我在此处添加了margin-top: 10px;,因此navbar-collapse collapse 中的项目与navbar-brand 中的徽标和文本水平对齐。

我希望这适用于本地主机和已发布的网站。

我还尝试将以下代码添加到 asp:ContentPlaceHolder ID="Stylesheets" 作为对 bootstrap.css 文件的额外引用,但也没有运气。

<link rel="stylesheet" runat="server" href="/Content/bootstrap.css" type="text/css" />

非常感谢您的意见。

您可以在下面看到可视化的结果:

更新:

实际上,在查看页面源代码时,似乎发生了一些奇怪的事情。

在我的 Site.master 上呈现 CSS 的代码:

在 localhost 上,源代码如下所示:

在已发布的网站上,源代码如下所示:

我刚刚意识到我不需要ContentPlaceHolder ID="Stylesheets"。我现在已将其从我的代码中删除,但问题仍然存在。

有什么不同的想法吗?

【问题讨论】:

【参考方案1】:

这背后可能有多种原因,我的猜测是:

    可能是,您的浏览器已经缓存了css 文件并且是 从那里使用文件。尝试清除浏览器缓存或使用 Ctrl + Shift + R 如果使用 firefox 或 chrome 硬重新加载 页面。 或者可能是因为您的视觉工作室没有上传css 文件。尝试通过FileZilla手动替换文件。 可能在头部或在您指定的更改之后提到了一种样式,这超出了您的更改的编写范围。检查应用所需更改后样式是否没有变化。 检查是否有!important 标志提到的一些样式属性。如果有,这意味着它优先于您的正常样式,即使您在所需的更改之后指定它们。

【讨论】:

Visual Studio 首先从 Plesk(GoDaddy 托管)中删除所有文件,然后上传所有文件,我验证并上传了 bootstrap.css 文件。我在 Edge 和 Chrome 中验证过,私下正常,我也试过 ctrl+shift+r 但没有成功。 你这是什么意思? ScriptManager 不是引用引导文件吗? 谢谢,使用 Ctrl + Shift + R 对我有用【参考方案2】:

对我来说最简单的解决方案是删除 css 捆绑。

我删除了这行代码: &lt;webopt:bundlereference runat="server" path="~/Content/css" /&gt; 并且还删除了 Bundle.config 文件。

在我的&lt;head&gt; 标签中,我现在有以下内容:

<link rel="stylesheet" runat="server" href="/Content/Site.css" type="text/css" />
<link rel="stylesheet" runat="server" href="/Content/bootstrap.css" type="text/css" />

【讨论】:

我想补充一点,这个解决方案可能/可能不是最好的。如果有更好的解决方案,请随时添加。

以上是关于为啥应用于 bootstrap.css 的更改在发布时不起作用,但在 localhost 上起作用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥“位置:粘性”不适用于 Core UI Bootstrap CSS

bootstrap table 导出数据为excel或其他,为啥点击了没反应

为啥 Visual Studio 不将我的更改应用于 HTML 文件?

bootstrap轮播 为啥我的轮播没有用

Bootstrap CSS - 更改表格边框颜色

将 html bootstrap 转换为 react.js jsx 样式后更改 css 样式