您可以创建一个自定义视图引擎:
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的引用属性来检查您正在使用的版本。在您的项目剃刀组装件]
而最后一步是有一些控制器:
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" />
您一直在讨论语法突出显示这与剃刀无关。它是你的编辑器的Visual Studio。你试图达到什么目的,你为什么要在你的CSS中使用'剃须刀'? – TJHeuvel 2012-04-23 11:54:42
@TJHeuvel为什么有人想在他们的HTML剃须刀?为什么人们使用服务器端脚本语言?因为他们希望他们的页面是动态的。这样他们可以将数据存储在数据库中而不是HTML文件中。所以我为什么要在我的CSS中使用剃须刀,是因为我希望我的CSS也是动态的。我可能会将设计相关的数据保存在我的数据库中(如背景颜色),并希望在我的css中使用它。至于intellisense,visual-studio就是这个qustion的标签之一。我想知道我能如何(如果可以的话)在css文件中使用razor intellisense,正如我提到的那样,它对我来说只是次要的东西。 – 2012-04-23 12:50:38
@ d4wn:你为什么希望你的CSS是动态的? SASS/LESS和视图引擎方法之间有相当大的区别,在后一种情况下,您只是发送客户端非缓存的东西,可能只是静态的...:S – 2012-04-23 13:18:10