2011-03-19 73 views
4

我喜歡HTML助手的想法,它允許我不寫所有的HTML通用元素,同時仍然可以完全控制,保留模型視圖分離並且可以強類型化。是否有任何視圖助手來生成CSS?

我想知道是否有可能以同樣的方式生成CSS樣式表或樣式定義 - 在視圖標記中使用助手?理想情況下,我希望根據一些面向對象的規則和定義生成一些CSS。

我找不到任何比樣式表壓縮和合並更多的解決方案。

回答

1

你所要求的並不是不可能的,但默認配置的方式是不可能的。原因是CSS文件不像視圖那樣被「解釋」。他們只是通過了。

你可以編寫一些爲你生成CSS的處理程序,但它不會像HTML助手那樣。

理論上,你可以編寫一個Html幫助程序來插入CSS內聯,但這實際上背離了CSS背後的目的,因爲現在需要在多個文件中包含相同的CSS,從而使視圖變大並使用更多帶寬。

所以基本上,答案是......不,沒有什麼像CSS的Html助手那樣。而它最可能不存在的原因是它在後方比在它的價值中更加痛苦。

+0

嗯,[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

5

在簡單的方法是使用定製視圖的結果:

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" /> 
+0

這是否適用於剃刀?我對Web表單視圖引擎的使用經驗是,它會跺腳內容類型標題,我實際上必須重寫onprerender的等價物以使其起作用。 – 2011-03-19 23:10:24

+0

@Wyatt Barnett,我提供的例子是Razor,但它也應該與WebForms視圖引擎一起工作。 – 2011-03-19 23:23:54

+0

這可以強制只鍵入一些CSS值,但它仍然不會在.foo和定義class =「foo」的元素之間產生任何依賴關係。也就是說,如果在仍有元素正在使用的情況下從視圖中刪除.foo,則不會收到任何警告/錯誤。 – orad 2012-10-02 21:54:00