如何使用剃刀在CSS文件?
我使用Razor视图引擎了一段时间,我很好奇使用它的样式表。 我可以用剃刀在<style>
的.cshtml文件块,但我在想,如果我能在外部.css文件也用它(想有一个.cscss格式)。 所以,我用Google搜索了一下,发现两件事情:
第一个是LESS :“动态样式表语言”。 这似乎易于使用和功能强大的所有功能,但我需要剃刀C#,真的。
二是动态CSS使用剃刀引擎 ,一个CodeProject上的文章这更像是我想要的,但它没有缓存或预编译支持(“不支持”我的意思是作家没有提及这些方面)。 我也想有一些语法在Visual Studio突出,但这是次要的。
所以,我怎么能写剃刀以最小的性能损失CSS文件,最好用语法高亮?
- 是否有一个“更完整”的项目是什么?
- 我可以提高上述项目达到缓存/编译? 如果是这样,怎么样?
作为一个方面说明:
我发现了一个名为RazorJS 。 这就像我想用它的缓存支持CSS一样的东西和javascript版本。 我提到这只是为了澄清我的需要。 我不需要在JavaScript中使用剃刀当前,但我想,如果我做出来的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>
[ 注意 ,如果你得到你可能需要改变外延式的版本号,以配合您的剃刀引擎版本的程序集绑定错误。 你可以看你的参考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" />