在.NET MVC中,我们可以将CSS保存在Views文件夹中吗?

时间:2009-01-15 07:02:35

标签: c# asp.net-mvc

我正在使用ASP.Net MVC。当我将CSS保留在Views文件夹中时,它不加载CSS。有人可以帮我解决这个问题吗?

5 个答案:

答案 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。 现在这个问题已经解决了。