我正在使用ASP.Net MVC。当我将CSS保留在Views文件夹中时,它不加载CSS。有人可以帮我解决这个问题吗?
答案 0 :(得分:2)
我喜欢每个View文件夹的css文件,仅用于组织。这样我就可以在同一目录中使用html和相应的css,而不是拥有一个大的css文件。
我是这样做的:
首先制作了一个“样式控制器”,它将所有文件合并为一个:
public class StyleController : Controller
{
[OutputCache(Duration = 86400, VaryByParam = "none")]
public ActionResult Index()
{
var cssFiles = Directory.GetFiles(Server.MapPath("~/Views"), "*.css",
SearchOption.AllDirectories);
var sb = new StringBuilder();
foreach (var cssFile in cssFiles)
{
sb.Append(System.IO.File.ReadAllText(cssFile));
sb.Append(Environment.NewLine);
}
return Content(sb.ToString(), "text/css");
}
}
然后在布局文件中添加对样式文件的引用
@Styles.Render("~/Style")
这项工作非常适合开发,但在生产中我更喜欢将StyleController的输出提取到物理文件中并使用包功能(更改“@ Styles.Render”行)
答案 1 :(得分:1)
如果您检查Views \ Web.Config,您会注意到所有HTTP请求都将传递给System.Web.HttpNotFoundHandler。
你当然可以通过修改它来“破解”你的出路(当然强烈反对!),但你可能遇到的另一个问题是你的“CSS”请求可能会冒险被映射控制器操作(取决于您的路由和Web服务器设置),以便您还必须修改global.asax.cs上的routes集合
总而言之:为了让你到达你想要的地方你必须(大量)修改ASP.NET MVC工作/结构的方式,这可能不是一个好主意......
答案 2 :(得分:1)
允许通过向Views文件夹中的web.config添加静态文件处理程序来提供这些文件:
<system.webServer>
<handlers>
<remove name="BlockViewHandler"/>
<add name="JsHandler" path="*.js" verb="*" type="System.Web.StaticFileHandler" />
<add name="MapHandler" path="*.js.map" verb="*" type="System.Web.StaticFileHandler" />
<add name="TsHandler" path="*.ts" verb="*" type="System.Web.StaticFileHandler" />
<add name="CssHandler" path="*.css" verb="*" type="System.Web.StaticFileHandler" />
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
答案 3 :(得分:0)
更新:不,它看起来像是被阻止了(404);看来,你必须把它们留在外面。这是有道理的,可与App_Code阻止等相媲美。
(原始答案) 您如何在视图/母版页中引用css?你使用的是“/views/foo.css”,“〜/ views / foo.css”,“foo.css”,还是什么?回想一下浏览器会认为它在“Some / Invented / Path”中,所以你的css解析需要相对于那个 - “〜/”(app-root)是最简单的。
我现在只是看看......
答案 4 :(得分:0)
非常感谢您的回答。 问题是Views文件夹中的web.config阻止加载CSS。 现在这个问题已经解决了。