c# - 如何在 RazorEngine 模板中使用 css/less 样式

标签 c# css less razorengine

我想使用 Antaris RazorEngine 生成大量不同的邮件。 是否有可能将脚本和样式包包含到布局中? 我们一起动态构建这些包,因此它们包含许多不同的 .css/.js 文件。

在我们的非电子邮件布局中,我们总是像这样包含它们:

@Styles.Render("~/bundles/" + theme + "/styles") 
@Scripts.Render("~/bundles/scripts") 
@RenderSection("scripts", false)

我不想使用内联样式,因为这会极大地拉伸(stretch)每个 View 并且难以维护。

我试图用谷歌搜索这个问题,但我没有找到我要搜索的内容。

谁能解释一下,如何做到这一点,如果它不能像我真正需要的那样工作,请解释为什么以及如何以其他方式做到这一点?

最佳答案

查看 this answer为基本模板。从这一点开始,您可以创建如下所示的帮助程序类。这些是创建自 Scripts 所必需的是一个静态类,不能添加到您的 TemplateBase作为 HtmlHelper 之类的属性和 ViewDataDictionary类可以。

    public class ScriptsHelper 
    {
       public IHtmlString Render(params string[] scripts) 
       {
          return Styles.Render(scripts);
       }
    }

然后您可以将这些辅助类添加到您的 HtmlTemplateBase<T>类为公共(public)属性

    [RequireNamespaces("System.Web.Mvc.Html")]
    public class HtmlTemplateBase<T>:TemplateBase<T>, IViewDataContainer
    {
        public ScriptsHelper Scripts = new ScriptsHelper();

        //... Additional Code 
    }

您的 RazorEngine View 现在可以访问您添加到帮助类的函数。因此,您间接调用了所需的函数,并且可以像使用普通类一样调用它们。

// This will actually be calling ScriptsHelper.Scripts(), which then calls the static function
@Scripts.Render("~/scripts/scripturl")

这些问题的解决方案有些老套。您将需要扩展您的 ScriptsHelper每个类(class) Scripts你需要的功能。可以为您的 Styles 执行相同的过程类也是如此。

您可以利用 Reference Resolver class导入 System.Web.Optimization 命名空间,但我无法使其正常工作。

关于c# - 如何在 RazorEngine 模板中使用 css/less 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54550269/

相关文章:

html - Gulp将多个css文件编译成一个

html - Mac 上的 Chrome 浏览器 : Scrollbars disappear when using `position: sticky`

html - 如何设置$mdDialog 的最大宽度?

css - 我可以根据 less/xCss 中的其他变量定义变量吗

c# - Timespan.TotalDays - 无法将 double 转换为字符串

c# - 分层数据查询建议

c# - 如何从代码隐藏中单击 Excel 功能区按钮

C#格式化外部Dll函数参数

html - 使用 LESS 在 div 中水平排列元素

javascript - Symfony、grunt、requires.js 和 Assetic