簡體   English   中英

如何在RazorEngine模板中使用CSS /更少樣式

[英]How to use css/less styles in RazorEngine template

我想通過使用Antaris RazorEngine生成大量不同的郵件。 是否可以在布局中包含腳本和樣式包? 我們將這些捆綁包動態地動態構建在一起,因此它們包含許多不同的.css / .js文件。

在我們的非電子郵件布局中,我們總是像這樣包含它們:

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

我不想使用內聯樣式,因為這會極大地拉伸每個視圖,並且很難維護。

我試圖用Google搜索這個問題,但沒有找到我要搜索的內容。

任何人都可以解釋一下,該怎么做,如果它不能像我實際需要的那樣起作用,請以其他方式解釋為什么以及如何做?

好吧,因為沒人能回答,所以我使用Premailer將我的.less文件(或從中生成的.css)內聯。 為我工作,即使這不是我想要的。

string viewString = System.IO.File.ReadAllText(viewPath); // view to string
string cssSiteString = System.IO.File.ReadAllText(cssSitePath); // css-file to string

Engine.Razor.AddTemplate(nameoftemplate, viewString);
Engine.Razor.Compile(viewPath);

var result = Engine.Razor.Run(viewPath, null, model, viewBag);

var pm = new PreMailer.Net.PreMailer(result); 
var completeMail = pm.MoveCssInline(css: cssSiteString); // this line moves the css inline

查看此答案以獲取基本模板。 至此,您可以創建如下的幫助器類。 這些是創建Scripts所必需的,因為Scripts是靜態類,不能像HtmlHelperViewDataDictionary類一樣作為屬性添加到TemplateBase中。

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

然后,您可以將那些幫助程序類作為公共屬性添加到HtmlTemplateBase<T>類中。

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

        //... Additional Code 
    }

現在,您的RazorEngine視圖將可以訪問您添加到助手類中的功能。 因此,您可以間接調用所需的函數,並且可以像使用普通類一樣調用它們。

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

這些是解決該問題的方法。 您將需要使用每個所需的Scripts函數來擴展ScriptsHelper類。 您的Styles類也可以執行相同的過程。

您可能可以利用Reference Resolver類導入System.Web.Optimization命名空間,但是我無法使其正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM