Css 使用Razor的动态样式表

Css 使用Razor的动态样式表,css,visual-studio,razor,server-side,Css,Visual Studio,Razor,Server Side,如何在CSS文件中使用Razor 我已经使用了一段时间,我很好奇在样式表上使用它。我可以在块的.cshtml文件中使用Razor,但我想知道是否可以在外部.css文件中使用Razor(希望使用.cscsss格式)。所以我在谷歌上搜索了一下,发现了两件事: 第一个是:“动态样式表语言”。它似乎易于使用,功能强大,但我真的需要Razor-C 第二个是,一篇CodeProject文章,它更像我想要的,但是它没有缓存或预编译支持(我说的“不支持”是指作者没有提到这些方面)。我还希望在VisualStud

如何在CSS文件中使用Razor

我已经使用了一段时间,我很好奇在样式表上使用它。我可以在
块的.cshtml文件中使用Razor,但我想知道是否可以在外部.css文件中使用Razor(希望使用.cscsss格式)。所以我在谷歌上搜索了一下,发现了两件事:

第一个是:“动态样式表语言”。它似乎易于使用,功能强大,但我真的需要Razor-C

第二个是,一篇CodeProject文章,它更像我想要的,但是它没有缓存或预编译支持(我说的“不支持”是指作者没有提到这些方面)。我还希望在VisualStudio中有一些语法高亮显示,但这是次要的

那么,如何以最低的性能成本,最好是语法突出显示,在CSS文件中编写Razor呢

  • 是否有一个“更完整”的项目
  • 我可以改进上述项目以实现缓存/编译吗?如果是,怎么做
作为旁注:

我发现了一个名为。它就像Javascript版本的CSS一样,支持缓存。我提到这一点只是为了澄清我的需要。目前我不需要在Javascript中使用Razor,但我想如果我能使用CSS,用Javascript做同样的事情不会太难。

您可以创建一个自定义视图引擎:

public class CSSViewEngine : RazorViewEngine
{
    public CSSViewEngine()
    {
        ViewLocationFormats = new[] 
        { 
            "~/Views/{1}/{0}.cscss", 
            "~/Views/Shared/{0}.cscss" 
        };
        FileExtensions = new[] { "cscss" };
    }

    protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
    {
        controllerContext.HttpContext.Response.ContentType = "text/css";
        return base.CreateView(controllerContext, viewPath, masterPath);
    }
}
并在
应用程序\u Start
中使用自定义扩展名注册它:

ViewEngines.Engines.Add(new CSSViewEngine());
RazorCodeLanguage.Languages.Add("cscss", new CSharpRazorCodeLanguage());
WebPageHttpHandler.RegisterExtension("cscss");
在web.config中,将扩展与生成提供程序关联:

<compilation debug="true" targetFramework="4.0">
    <assemblies>
        ...
    </assemblies>

    <buildProviders>
        <add extension=".cscss" type="System.Web.WebPages.Razor.RazorBuildProvider, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    </buildProviders>
</compilation>
和相应的视图:(
~/Views/Styles/Foo.cscss
):

现在可以作为样式包含在布局中:

<link href="@Url.Action("Foo", "Styles")" rel="stylesheet" type="text/css" />


您一直在谈论语法突出显示,这与razor无关。是VisualStudio负责编辑。你想达到什么目的,为什么你想在css中使用“razor”?@TJHeuvel为什么有人想在html中使用razor?为什么人们使用服务器端脚本语言?因为他们希望他们的页面是动态的。通过这种方式,他们可以将数据存储在数据库中,而不是html文件中。所以我为什么要在css中使用razor,是因为我希望css也是动态的。我可能会在数据库中保留与设计相关的数据(如背景色),并希望在css中使用它。至于intellisense,VisualStudio就是这个问题的标签之一。我想知道如何(如果可以的话)在css文件中使用razor intellisense,正如我提到的,这对我来说只是次要的事情。@d4wn:为什么希望css是动态的?SASS/LESS和视图引擎方法有很大的区别,在后一种情况下,您只是发送客户端非缓存的东西,可能只是静态的…:这正是我想要的,谢谢。我的下一个任务是找到如何让VS为.cscss文件执行一些语法设置(&intellisense),我想。@Darin Dimitrov我已经复制了这段代码。当我想在VS中编译(F5)我的asp.net mvc3解决方案时,我遇到了一个错误:错误136无法确定“~/Views/Styles/Test.cscss”的代码语言。AMS\AMS\ASPNETCOMPILER知道为什么吗?@Darin,代码很棒,但我想知道如何修改它以提供更少的文件,因为这需要额外的解释…想法?
@model AppName.Models.MyViewModel

/** This file was generated on @Model.Date **/

body {
    background-color: Red;
}
<link href="@Url.Action("Foo", "Styles")" rel="stylesheet" type="text/css" />