我喜歡HTML助手的想法,它允許我不寫所有的HTML通用元素,同時仍然可以完全控制,保留模型視圖分離並且可以強類型化。是否有任何視圖助手來生成CSS?
我想知道是否有可能以同樣的方式生成CSS樣式表或樣式定義 - 在視圖標記中使用助手?理想情況下,我希望根據一些面向對象的規則和定義生成一些CSS。
我找不到任何比樣式表壓縮和合並更多的解決方案。
我喜歡HTML助手的想法,它允許我不寫所有的HTML通用元素,同時仍然可以完全控制,保留模型視圖分離並且可以強類型化。是否有任何視圖助手來生成CSS?
我想知道是否有可能以同樣的方式生成CSS樣式表或樣式定義 - 在視圖標記中使用助手?理想情況下,我希望根據一些面向對象的規則和定義生成一些CSS。
我找不到任何比樣式表壓縮和合並更多的解決方案。
你所要求的並不是不可能的,但默認配置的方式是不可能的。原因是CSS文件不像視圖那樣被「解釋」。他們只是通過了。
你可以編寫一些爲你生成CSS的處理程序,但它不會像HTML助手那樣。
理論上,你可以編寫一個Html幫助程序來插入CSS內聯,但這實際上背離了CSS背後的目的,因爲現在需要在多個文件中包含相同的CSS,從而使視圖變大並使用更多帶寬。
所以基本上,答案是......不,沒有什麼像CSS的Html助手那樣。而它最可能不存在的原因是它在後方比在它的價值中更加痛苦。
在簡單的方法是使用定製視圖的結果:
public class CssViewResult : PartialViewResult
{
private readonly object _model;
public CssViewResult(object model)
{
_model = model;
}
public override void ExecuteResult(ControllerContext context)
{
this.ViewData.Model = _model;
base.ExecuteResult(context);
context.HttpContext.Response.ContentType = "text/css";
}
}
,然後簡單的控制器動作:
public ActionResult MyCss()
{
SomeModel model = ...
return new CssViewResult(model);
}
並在相應的MyCss.cshtml
視圖:
@model AppName.Models.SomeModel
.foo {
background-color: @Model.SomeColor;
}
然後:
<link href="@Url.Action("MyCss", "SomeController")" rel="stylesheet" type="text/css" />
這是否適用於剃刀?我對Web表單視圖引擎的使用經驗是,它會跺腳內容類型標題,我實際上必須重寫onprerender的等價物以使其起作用。 – 2011-03-19 23:10:24
@Wyatt Barnett,我提供的例子是Razor,但它也應該與WebForms視圖引擎一起工作。 – 2011-03-19 23:23:54
這可以強制只鍵入一些CSS值,但它仍然不會在.foo和定義class =「foo」的元素之間產生任何依賴關係。也就是說,如果在仍有元素正在使用的情況下從視圖中刪除.foo,則不會收到任何警告/錯誤。 – orad 2012-10-02 21:54:00
嗯,[GWT整潔地處理這個問題](https://developers.google.com/web-toolkit/doc/latest/DevGuideUiBinder#Hello_Stylish_World)通過強類型的樣式,所以它不是不可能的。我真的在尋找ASP.NET MVC中的類似功能,因爲我使用C#而不是Java來編寫代碼。 – orad 2012-10-02 21:45:06