我喜欢HTML帮助程序的想法,它允许我不要为常见元素编写所有HTML,同时仍然给予我完全控制,保留模型 - 视图分离并且可以强类型化。
我想知道是否有可能以相同的方式生成CSS样式表或样式定义 - 在视图标记中使用帮助器?理想情况下,我希望根据一些面向对象的规则和定义生成一些CSS。
我找不到任何提供样式表压缩和合并的解决方案。
答案 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助手一样。它最有可能不存在的原因是后方的痛苦多于它的价值。