问题 ASP.NET MVC - 在母版页中引用样式表


我有/ Views / Shared中的母版页。母版页引用了样式表 /Content 夹。

如果我使用参考样式表,一切正常 "../../Content/style.css"。但是,我的Web应用程序不在我们的生产环境的根文件夹中,因此相对路径不起作用。

我试过“<%= ResolveUrl(”〜/ content / style.css“)%>”哪个在生产场景中有效,但是Visual Studio中的设计者抱怨我的类错了(我无法预览页面在设计选项卡中使用CSS)。

是否有解决方案使这两种情况都有效?我通过编写重置链接标记的服务器端代码在WebForms中实现了这一点。我可以在这做,但我想避免它。


11625
2018-01-20 18:54


起源

“我的网络应用程序不在根文件夹中”...相对路径不引用根文件夹,所以我不确定为什么这会很重要。您确定您的内容文件夹是否相同 相对的 生产服务器上的位置? - Robert Harvey♦
生产和开发的相对路径是相同的。相对路径在相对于母版页时是正确的。但是,该路径与使用母版页的页面无关,该母版页是用户浏览器使用的路径。 - Mike Therien


答案:


尝试这种技术 - 包括样式表  方法。包含一个具有固定路径引用的引用,Visual Studio将将其用于设计时支持,但将其包含在服务器端注释中,以便在运行时实际上不包含它。第二个引用是在运行时使用的“真实”引用,而对于Url.Content(),无论您的应用程序是否为子目录,它都将起作用。

<% /* %> 
    <link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> 
<% */ %>

<link href="<%=Url.Content("~/Content/Site.css") %>" rel="stylesheet" 
      type="text/css" />

8
2018-01-20 19:08



+1有趣的技巧!我也会使用T4MVC来做到这一点。 - Dan Atkinson
我喜欢这个主意。这是一种解决方法,但它满足了这两个要求。如果ASPX设计器在预览页面时解析服务器端代码会很好。 - Mike Therien
你也可以使静态链接runat =“server”visible =“false”,这有点简单。 - Ian Mercer


这是最好的做法 扩展URL Helper。这允许您从视图中轻松调用它,如果您的结构或文件发生更改,则无需进行大量查找/替换。

public static string Image(this UrlHelper helper, string fileName)  
{  
    return helper.Content("~/Content/Images/" + fileName));  
}  

public static string Stylesheet(this UrlHelper helper, string fileName)  
{  
    return helper.Content("~/Content/Stylesheets/" + fileName);  
}  

public static string Script(this UrlHelper helper, string fileName)  
{  
    return helper.Content("~/Content/Scripts/" + fileName);  
}

   <link href="<%= UrlHelper.Stylesheet("Main.css")%>" rel="stylesheet" 
         type="text/css" />  

6
2018-01-20 19:10



为什么这是最佳做法? - Robert Harvey♦
这样您就可以在视图中轻松引用它,如果其中任何一项发生变化,您就不必进行查找/替换。 - Martin
我理解你的观点,但它并没有解决VS设计师没有解决CSS位置的问题。 - Mike Therien
我不会依赖VS设计师(设计师很少像真正的浏览器那样渲染)。您应该在实际的浏览器中查看该页面。 - Martin
我同意。但它可以用于参考检查。 - Mike Therien


在Views文件夹中,然后进入Shared文件夹有助于理解如何在MVC中引用CSS文件。


0
2017-12-26 23:32