ASP.NET MVC的动态CSS?

Mat*_*eer 21 css asp.net-mvc

看起来.NET社区一般都没有选择CSS编译器.在搜索Google时,我发现任何与远程相关的内容都没有.

有没有人使用ASP.NET MVC想出一个方案来更智能地生成他们的CSS?我希望能够通过Razor运行我的CSS,或者为了SASS来移植或者你有什么.也许我手上有一个新的项目:)

Dar*_*rov 47

我希望能够通过Razor运行我的CSS

什么阻止你?

public class CssViewResult : PartialViewResult
{
    public override void ExecuteResult(ControllerContext context)
    {
        context.HttpContext.Response.ContentType = "text/css";
        base.ExecuteResult(context);
    }
}

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return new CssViewResult();
    }
}
Run Code Online (Sandbox Code Playgroud)

并在~/Views/Home/Index.cshtml:

@{
    var color = "White";
    if (DateTime.Now.Hour > 18 || DateTime.Now.Hour < 8)
    {
        color = "Black";
    }
}
.foo {
    color: @color;
}
Run Code Online (Sandbox Code Playgroud)

现在剩下的就是包括它:

<link href="@Url.Action("index")" rel="stylesheet" type="text/css" />
Run Code Online (Sandbox Code Playgroud)

您还可以将模板强类型化为视图模型,写循环,ifs,包含,...

  • 请注意,如果您使用MasterPages和Area,并且这是在最高级别的MasterPage中,则导航到该区域后将不会调用Css控制器.要解决此问题,只需添加一个指定区域的参数为emtpystring:<link href ="@ Url.Action("GetCss","Css",new {area =""})"rel ="stylesheet"type ="text/css"/> (2认同)

Cle*_*man 6

对@ darin-dimitrov的回答略有修改.这增加了将模型传递给CssView的能力:

public class CssViewResult : PartialViewResult
{
    public CssViewResult()
    {

    }

    public CssViewResult(object model)
    {
        if (model != null)
        {
            ViewData.Model = model;
        }
    }

    public override void ExecuteResult(ControllerContext context)
    {
        context.HttpContext.Response.ContentType = "text/css";
        base.ExecuteResult(context);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你只需使用它:

return new CssViewResult(model);
Run Code Online (Sandbox Code Playgroud)