您可以創建一個自定義視圖引擎:
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