是否有任何视图助手来生成CSS?

时间:2011-03-19 22:57:24

标签: css asp.net-mvc helpers

我喜欢HTML帮助程序的想法,它允许我不要为常见元素编写所有HTML,同时仍然给予我完全控制,保留模型 - 视图分离并且可以强类型化。

我想知道是否有可能以相同的方式生成CSS样式表或样式定义 - 在视图标记中使用帮助器?理想情况下,我希望根据一些面向对象的规则和定义生成一些CSS。

我找不到任何提供样式表压缩和合并的解决方案。

2 个答案:

答案 0 :(得分: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" />

答案 1 :(得分:1)

您所要求的并非不可能,但默认情况下配置的方式是不可能的。原因是CSS文件不像视图那样“解释”。他们刚刚通过。

您可以编写一些为您生成CSS的处理程序,但它不会像HTML帮助程序那样。

理论上,您可以编写一个将内嵌CSS插入的Html帮助程序,但这确实打败了CSS背后的目的,因为现在您需要在多个文件中包含相同的CSS,从而使您的视图更大并使用更多带宽。 / p>

所以基本上,答案是......不,没有什么像CSS的Html助手一样。它最有可能不存在的原因是后方的痛苦多于它的价值。