动态样式表使用剃刀(Dynamic Stylesheets Using Razor)

2019-06-23 21:31发布

如何使用剃刀在CSS文件?

我使用Razor视图引擎了一段时间,我很好奇使用它的样式表。 我可以用剃刀在<style>.cshtml文件块,但我在想,如果我能在外部.css文件也用它(想有一个.cscss格式)。 所以,我用Google搜索了一下,发现两件事情:

第一个是LESS :“动态样式表语言”。 这似乎易于使用和功能强大的所有功能,但我需要剃刀C#,真的。

二是动态CSS使用剃刀引擎 ,一个CodeProject上的文章这更像是我想要的,但它没有缓存或预编译支持(“不支持”我的意思是作家没有提及这些方面)。 我也想有一些语法在Visual Studio突出,但这是次要的。

所以,我怎么能写剃刀以最小的性能损失CSS文件,最好用语法高亮?

  • 是否有一个“更完整”的项目是什么?
  • 我可以提高上述项目达到缓存/编译? 如果是这样,怎么样?

作为一个方面说明:
我发现了一个名为RazorJS 。 这就像我想用它的缓存支持CSS一样的东西和javascript版本。 我提到这只是为了澄清我的需要。 我不需要在JavaScript中使用剃刀当前,但我想,如果我做出来的CSS,这样做的JavaScript同样的事情不会太辛苦。

Answer 1:

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

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);
    }
}

并且还与自定义扩展注册它Application_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>

[ 注意 ,如果你得到你可能需要改变外延式的版本号,以配合您的剃刀引擎版本的程序集绑定错误。 你可以看你的参考System.Web.WebPages.Razor装配在项目属性]检查正在使用哪个版本

而最后一步是有一定的控制:

public class StylesController : Controller
{
    public ActionResult Foo()
    {
        var model = new MyViewModel
        {
            Date = DateTime.Now
        };
        return View(model);
    }
}

和相应的视图:( ~/Views/Styles/Foo.cscss ):

@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" />


文章来源: Dynamic Stylesheets Using Razor