【问题标题】:How to return dynamic CSS with ASP.NET MVC?如何使用 ASP.NET MVC 返回动态 CSS?
【发布时间】:2011-02-12 14:28:03
【问题描述】:

我需要一个能够让我完成以下任务的解决方案:

  • 返回由操作方法动态生成的 CSS
  • 根据请求参数或 cookie 选择 CSS 文件
  • 使用工具组合和压缩(缩小)CSS

我目前正在考虑为什么 ASP.NET MVC 中没有 CssResult,以及它是否存在的原因。创建自定义 ActionResult 不是解决此问题的最佳方法吗?还有其他一些我忽略的方法来做我需要的吗?

在我开始这项任务之前,任何其他可能相关的建议或提示也将不胜感激:)

【问题讨论】:

    标签: c# .net asp.net-mvc css


    【解决方案1】:

    您需要返回内容类型为text/cssFileResultContentResult

    例如:

    return Content(cssText, "text/css");
    return File(cssStream, "text/css");
    

    编辑:您可以在控制器中创建Css 辅助方法:

    protected ContentResult Css(string cssText) { return Content(cssText, "text/css"); }
    protected FileResult Css(Stream cssStream) { return File(cssStream, "text/css"); }
    

    【讨论】:

    • 嗨,这与我正在寻找的类似,如何从 @section { Styles } 的 MVC 视图中调用它
    • @transformer:只需制作一个普通的 <link> 标记,指向一个为您的 CSS 提供服务的 URL。
    【解决方案2】:

    无需创建自定义 ActionResult 类型。由于 CSS 是“纯文本”,因此您应该可以使用 ContentResult。假设您继承了 Controller 类,只需执行以下操作:

    return Content(cssData, "text/css");
    

    【讨论】:

      【解决方案3】:

      我目前正在考虑为什么 ASP.NET MVC 中没有 CssResult,以及它的缺失是否有原因。

      只是因为团队忙得不可开交,显然需要为生活中的所有案例添加 ActionResults。

      创建自定义 ActionResult 不是解决此问题的最佳方式吗?

      这样做是正确的方法。我根据需要添加了 RssActionResult 和 AtomActionResult。为文档、pdf、图像等添加更多类型也是合理的。

      返回由动作方法动态生成的 CSS

      还要记住,浏览器通常会缓存 css,除非它看到 url 中有一些变化。添加一个始终递增的参数是一种常见的解决方案。

      <link rel="stylesheet" href="http://site.com/styles.css?v=26">
      

      版本的额外路由参数可能也可以工作。

      【讨论】:

      • @SLaks:我更喜欢这种方式,这样我就不会一次又一次地重复 content-type 或者更糟的是忘记一次。
      猜你喜欢
      • 2011-05-28
      • 1970-01-01
      • 2017-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      相关资源
      最近更新 更多