【发布时间】:2011-03-19 22:57:24
【问题描述】:
我喜欢 HTML 帮助器的想法,它允许我不必为常见元素编写所有 HTML,同时仍然让我完全控制、保留模型-视图分离并且可以进行强类型化。
我想知道是否可以以相同的方式生成 CSS 样式表或样式定义 - 在视图标记中使用帮助器?理想情况下,我希望根据一些面向对象的规则和定义生成一些 CSS。
除了样式表压缩和合并之外,我找不到任何解决方案。
【问题讨论】:
标签: css asp.net-mvc helpers
我喜欢 HTML 帮助器的想法,它允许我不必为常见元素编写所有 HTML,同时仍然让我完全控制、保留模型-视图分离并且可以进行强类型化。
我想知道是否可以以相同的方式生成 CSS 样式表或样式定义 - 在视图标记中使用帮助器?理想情况下,我希望根据一些面向对象的规则和定义生成一些 CSS。
除了样式表压缩和合并之外,我找不到任何解决方案。
【问题讨论】:
标签: css asp.net-mvc helpers
简单的方法是使用自定义视图结果:
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" />
【讨论】:
您所要求的并非不可能,但默认情况下配置的方式是不可能的。原因是 CSS 文件不像视图那样被“解释”。他们只是通过了。
您可以编写一些为您生成 CSS 的处理程序,但它不会像 HTML 帮助程序那样。
理论上,您可以编写一个 Html 帮助程序来内联插入 CSS,但这确实违背了 CSS 背后的目的,因为现在您需要在多个文件中包含相同的 CSS,从而使您的视图更大并使用更多带宽。
所以基本上,答案是.. 不,没有什么比 CSS 的 Html 助手更好的了。而它最有可能不存在的原因是它的背后更痛苦,而不是它的价值。
【讨论】: