public void TestCompileAndRun_Linq() { RazorEngine razorEngine = new RazorEngine(); RazorEngineCompiledTemplate <TestModel2> template = razorEngine.Compile <TestModel2>( @" @foreach (var item in Model.Numbers.OrderByDescending(x => x)) { <p>@item</p> } "); string expected = @" <p>3</p> <p>2</p> <p>1</p> "; string actual = template.Run(instance => { instance.Initialize(new TestModel1() { Numbers = new[] { 2, 1, 3 } }); }); Assert.AreEqual(expected, actual); }
private static string AddLayoutToPage(ApplicationDbContext context, RenderedTemplate renderedTemplate, List <string> assemblies, Page page) { IncludeRazorEngine engine = new IncludeRazorEngine(assemblies); RazorEngine razorEngine = new RazorEngine(); RazorEngineCompiledTemplate <LayoutTemplateBase> compiledLayout = razorEngine.Compile <LayoutTemplateBase>(context.Layouts.Find(renderedTemplate.Layout).Contents, engine.GetOptionsBuilder); string renderCss = page.CssContents; string renderJs = page.JsContents; foreach (var component in renderedTemplate.ComponentDependencies.Distinct().Select(componentDependency => context.Components.Find(componentDependency))) { renderCss += "\n" + component.CssContents; renderJs += "\n" + component.JsContents; } return(engine.RenderLayout(compiledLayout, new { RenderBody = renderedTemplate.HtmlContents, RenderCss = renderCss, // InnerJsContents already has a \n at the beginning of it RenderJs = renderJs + renderedTemplate.InnerJsContents, ViewData = renderedTemplate.ViewData })); }
private static string RenderPage(ApplicationDbContext context, Dictionary <string, RazorEngineCompiledTemplate <IncludeTemplateBase> > compiledIncludes, List <string> assemblies, Page page) { IncludeRazorEngine engine = new IncludeRazorEngine(assemblies); RazorEngine razorEngine = new RazorEngine(); RazorEngineCompiledTemplate <IncludeTemplateBase> compiledTemplate = razorEngine.Compile <IncludeTemplateBase>(page.HtmlContents, engine.GetOptionsBuilder); RenderedTemplate renderedTemplate = engine.Render(compiledTemplate, compiledIncludes, new { }); // Remove any inline script elements and store them separately List <string> inlineScripts = new List <string>(); XmlDocument doc = new XmlDocument(); // Wrap the page in a PageContainer so that including text outside of any element doesn't throw an error doc.AppendChild(doc.CreateElement("PageContainer")); doc.GetElementsByTagName("PageContainer")[0].InnerXml = renderedTemplate.HtmlContents; while (doc.GetElementsByTagName("script").Count > 0) { var node = doc.GetElementsByTagName("script")[0]; inlineScripts.Add(node.InnerText); node.ParentNode.RemoveChild(node); } renderedTemplate.HtmlContents = doc.GetElementsByTagName("PageContainer")[0].InnerXml; renderedTemplate.InnerJsContents = inlineScripts.Aggregate(string.Empty, (current, script) => current + "\n" + script); return(renderedTemplate.Layout is null ? renderedTemplate.HtmlContents : AddLayoutToPage(context, renderedTemplate, assemblies, page)); }
public void TestCompileAndRun_DynamicModel_Plain() { RazorEngine razorEngine = new RazorEngine(); RazorEngineCompiledTemplate template = razorEngine.Compile("Hello @Model.Name"); string actual = template.Run(new { Name = "Alex" }); Assert.AreEqual("Hello Alex", actual); }
public void TestCompileAndRun_HtmlAttribute() { RazorEngine razorEngine = new RazorEngine(); RazorEngineCompiledTemplate template = razorEngine.Compile("<div title=\"@Model.Name\">Hello</div>"); string actual = template.Run(new { Name = "Alex" }); Assert.AreEqual("<div title=\"Alex\">Hello</div>", actual); }
public void TestCompileAndRun_InAttributeVariables() { RazorEngine razorEngine = new RazorEngine(); RazorEngineCompiledTemplate template = razorEngine.Compile("<div class=\"circle\" style=\"background-color: hsla(@Model.Colour, 70%, 80%,1);\">"); string actual = template.Run(new { Colour = 88 }); Assert.AreEqual("<div class=\"circle\" style=\"background-color: hsla(88, 70%, 80%,1);\">", actual); }
public void TestCompileAndRun_HtmlLiteral() { RazorEngine razorEngine = new RazorEngine(); RazorEngineCompiledTemplate template = razorEngine.Compile("<h1>Hello @Model.Name</h1>"); string actual = template.Run(new { Name = "Alex" }); Assert.AreEqual("<h1>Hello Alex</h1>", actual); }
public async Task TestCompileAndRun_HtmlAttributeAsync() { RazorEngine razorEngine = new RazorEngine(); RazorEngineCompiledTemplate template = await razorEngine.CompileAsync("<div title=\"@Model.Name\">Hello</div>"); string actual = await template.RunAsync(new { Name = "Alex" }); Assert.AreEqual("<div title=\"Alex\">Hello</div>", actual); }
public async Task TestCompileAndRun_HtmlLiteralAsync() { RazorEngine razorEngine = new RazorEngine(); RazorEngineCompiledTemplate template = await razorEngine.CompileAsync("<h1>Hello @Model.Name</h1>"); string actual = await template.RunAsync(new { Name = "Alex" }); Assert.AreEqual("<h1>Hello Alex</h1>", actual); }
public async Task TestCompileAndRun_DynamicModel_PlainAsync() { RazorEngine razorEngine = new RazorEngine(); RazorEngineCompiledTemplate template = await razorEngine.CompileAsync("Hello @Model.Name"); string actual = await template.RunAsync(new { Name = "Alex" }); Assert.AreEqual("Hello Alex", actual); }
public string RenderLayout(RazorEngineCompiledTemplate <LayoutTemplateBase> compiledLayout, object model) { return(compiledLayout.Run(instance => { if (!(model is AnonymousTypeWrapper)) { model = new AnonymousTypeWrapper(model); } instance.Model = model; })); }
public void TestSaveToFile() { RazorEngine razorEngine = new RazorEngine(); RazorEngineCompiledTemplate initialTemplate = razorEngine.Compile("Hello @Model.Name"); initialTemplate.SaveToFile("testTemplate.dll"); RazorEngineCompiledTemplate loadedTemplate = RazorEngineCompiledTemplate.LoadFromFile("testTemplate.dll"); string initialTemplateResult = initialTemplate.Run(new { Name = "Alex" }); string loadedTemplateResult = loadedTemplate.Run(new { Name = "Alex" }); Assert.AreEqual(initialTemplateResult, loadedTemplateResult); }
public void TestCompileAndRun_TypedModel1() { RazorEngine razorEngine = new RazorEngine(); RazorEngineCompiledTemplate <TestModel1> template = razorEngine.Compile <TestModel1>("Hello @A @B @(A + B) @C @Decorator(\"777\")"); string actual = template.Run(instance => { instance.A = 1; instance.B = 2; instance.C = "Alex"; }); Assert.AreEqual("Hello 1 2 3 Alex -=777=-", actual); }
public async Task TestSaveToFileAsync() { RazorEngine razorEngine = new RazorEngine(); IRazorEngineCompiledTemplate initialTemplate = await razorEngine.CompileAsync("Hello @Model.Name"); await initialTemplate.SaveToFileAsync("testTemplate.dll"); IRazorEngineCompiledTemplate loadedTemplate = await RazorEngineCompiledTemplate.LoadFromFileAsync("testTemplate.dll"); string initialTemplateResult = await initialTemplate.RunAsync(new { Name = "Alex" }); string loadedTemplateResult = await loadedTemplate.RunAsync(new { Name = "Alex" }); Assert.AreEqual(initialTemplateResult, loadedTemplateResult); }
public void TestCompileAndRun_TypedModel2() { RazorEngine razorEngine = new RazorEngine(); RazorEngineCompiledTemplate <TestModel2> template = razorEngine.Compile <TestModel2>("Hello @Model.Decorator(Model.C)"); string actual = template.Run(instance => { instance.Initialize(new TestModel1() { C = "Alex" }); }); Assert.AreEqual("Hello -=Alex=-", actual); }
public void TestSaveToStream() { RazorEngine razorEngine = new RazorEngine(); RazorEngineCompiledTemplate initialTemplate = razorEngine.Compile("Hello @Model.Name"); MemoryStream memoryStream = new MemoryStream(); initialTemplate.SaveToStream(memoryStream); memoryStream.Position = 0; RazorEngineCompiledTemplate loadedTemplate = RazorEngineCompiledTemplate.LoadFromStream(memoryStream); string initialTemplateResult = initialTemplate.Run(new { Name = "Alex" }); string loadedTemplateResult = loadedTemplate.Run(new { Name = "Alex" }); Assert.AreEqual(initialTemplateResult, loadedTemplateResult); }
static void Main(string[] args) { RazorEngine razorEngine = new RazorEngine(); RazorEngineCompiledTemplate template = razorEngine.Compile(Content); string result = template.Run(new { Name = "Alexander", Items = new List <string>() { "item 1", "item 2" } }); Console.WriteLine(result); Console.ReadKey(); }
public async Task TestSaveToStreamAsync() { RazorEngine razorEngine = new RazorEngine(); IRazorEngineCompiledTemplate initialTemplate = await razorEngine.CompileAsync("Hello @Model.Name"); MemoryStream memoryStream = new MemoryStream(); await initialTemplate.SaveToStreamAsync(memoryStream); memoryStream.Position = 0; IRazorEngineCompiledTemplate loadedTemplate = await RazorEngineCompiledTemplate.LoadFromStreamAsync(memoryStream); string initialTemplateResult = await initialTemplate.RunAsync(new { Name = "Alex" }); string loadedTemplateResult = await loadedTemplate.RunAsync(new { Name = "Alex" }); Assert.AreEqual(initialTemplateResult, loadedTemplateResult); }
public RenderedTemplate Render(RazorEngineCompiledTemplate <IncludeTemplateBase> compiledTemplate, IDictionary <string, RazorEngineCompiledTemplate <IncludeTemplateBase> > compiledIncludes, object model) { List <string> usedIncludes = new List <string>(); string templateLayout = string.Empty; Dictionary <string, dynamic> templateViewData = new Dictionary <string, dynamic>(); string templateOutput = compiledTemplate.Run(instance => { if (!(model is AnonymousTypeWrapper)) { model = new AnonymousTypeWrapper(model); } instance.Model = model; instance.IncludeCallback = (key, includeModel) => { usedIncludes.Add(key); RenderedTemplate renderedTemplate = Render(compiledIncludes[key], compiledIncludes, includeModel); renderedTemplate.ViewData.ToList().ForEach(item => { templateViewData[item.Key] = item.Value; }); return(renderedTemplate.HtmlContents); }; instance.LayoutCallback = key => { templateLayout = key; }; instance.ViewData.Callback = newViewData => { templateViewData = newViewData; }; }); return(new RenderedTemplate { HtmlContents = templateOutput, ComponentDependencies = usedIncludes, Layout = templateLayout, ViewData = templateViewData }); }
internal async Task LoadTemplateAsync() { template = razorEngine.Compile(await File.ReadAllTextAsync(templateFile)); }
public bool SetView(string name, RazorEngineCompiledTemplate template) { return(caches.AddOrUpdate(name, template, (key, oldTemplate) => template) == template); }