我喜欢HTML助手的想法,它允许我不写所有的HTML通用元素,同时仍然可以完全控制,保留模型视图分离并且可以强类型化。是否有任何视图助手来生成CSS?
我想知道是否有可能以同样的方式生成CSS样式表或样式定义 - 在视图标记中使用助手?理想情况下,我希望根据一些面向对象的规则和定义生成一些CSS。
我找不到任何比样式表压缩和合并更多的解决方案。
我喜欢HTML助手的想法,它允许我不写所有的HTML通用元素,同时仍然可以完全控制,保留模型视图分离并且可以强类型化。是否有任何视图助手来生成CSS?
我想知道是否有可能以同样的方式生成CSS样式表或样式定义 - 在视图标记中使用助手?理想情况下,我希望根据一些面向对象的规则和定义生成一些CSS。
我找不到任何比样式表压缩和合并更多的解决方案。
你所要求的并不是不可能的,但默认配置的方式是不可能的。原因是CSS文件不像视图那样被“解释”。他们只是通过了。
你可以编写一些为你生成CSS的处理程序,但它不会像HTML助手那样。
理论上,你可以编写一个Html帮助程序来插入CSS内联,但这实际上背离了CSS背后的目的,因为现在需要在多个文件中包含相同的CSS,从而使视图变大并使用更多带宽。
所以基本上,答案是......不,没有什么像CSS的Html助手那样。而它最可能不存在的原因是它在后方比在它的价值中更加痛苦。
在简单的方法是使用定制视图的结果:
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" />
这是否适用于剃刀?我对Web表单视图引擎的使用经验是,它会跺脚内容类型标题,我实际上必须重写onprerender的等价物以使其起作用。 – 2011-03-19 23:10:24
@Wyatt Barnett,我提供的例子是Razor,但它也应该与WebForms视图引擎一起工作。 – 2011-03-19 23:23:54
这可以强制只键入一些CSS值,但它仍然不会在.foo和定义class =“foo”的元素之间产生任何依赖关系。也就是说,如果在仍有元素正在使用的情况下从视图中删除.foo,则不会收到任何警告/错误。 – orad 2012-10-02 21:54:00
嗯,[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