css – 使用Razor的动态样式表

前端之家收集整理的这篇文章主要介绍了css – 使用Razor的动态样式表前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何在CSS文件中使用Razor?

我使用Razor View Engine一段时间,我很好奇在样式表上使用它.我可以在< style>中使用Razor .cshtml文件的块,但我想知道我是否可以在外部.css文件中使用它(想要一个.cscss格式).所以我google了,发现两件事情:

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

第二个是Dynamic CSS Using Razor Engine,一个CodeProject文章更像我想要的,但它没有缓存或预编译支持(“不支持”我的意思是作者没有提到这些方面).我也想在Visual Studio中有一些语法突出显示,但这是次要的.

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

有没有一个“更完整”的项目呢?
>我可以改进上述项目来实现缓存/编译吗?如果是这样,怎么办?

作为附注:
我发现一个名为RazorJS的项目.它就像我想要的CSS缓存支持的JavaScript版本一样.我提到这只是为了澄清我的需要.我现在不需要在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);
    }
}

并在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>

[注意,如果您收到装配体绑定错误,可能需要更改扩展类型中的版本号,以匹配您的Razor引擎版本.您可以通过查看您对项目中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" />

猜你在找的CSS相关文章