2011-03-19 74 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