我使用剃刀引擎https://github.com/Antaris/RazorEngine來解析我的電子郵件模板的正文。是否可以定義佈局幷包含其他.cshtml文件?例如共同的頁眉和頁腳。RazorEngine佈局
回答
我有共同的模板和佈局工作,這兩個職位的幫助:
RazorEngine string layouts and sections?
這是我的解決方案:
解決方案1: 佈局
使用通過設置_layout
@{
_Layout = "Layout.cshtml";
ViewBag.Title = Model.Title;
}
頁腳
@section Footer
{
@RenderPart("Footer.cshtml")
}
Layout.cshtml
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html>
<head>
</head>
<body>
<div id="content">
@RenderBody()
</div>
@if (IsSectionDefined("Footer"))
{
<div id="footer">
@RenderSection("Footer")
</div>
}
</body>
</html>
TemplateBaseExtensionsð
用RenderPart方法
public abstract class TemplateBaseExtensions<T> : TemplateBase<T>
{
public string RenderPart(string templateName, object model = null)
{
string path = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, "Templates", templateName);
return Razor.Parse(File.ReadAllText(path), model);
}
}
剃刀配置
集BaseTemplateType擴展TemplateBase您TemplateBaseExtensions類
TemplateServiceConfiguration templateConfig = new TemplateServiceConfiguration
{
BaseTemplateType = typeof(TemplateBaseExtensions<>)
};
Razor.SetTemplateService(new TemplateService(templateConfig));
編輯解決方案2:
如果您使用的是TemplateResolver。RenderPart不需要使用@include代替
頁腳
解析器
public class TemplateResolver : ITemplateResolver
{
public string Resolve(string name)
{
if (name == null)
{
throw new ArgumentNullException("name");
}
string path = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, "Templates", name);
return File.ReadAllText(path, System.Text.Encoding.Default);
}
}
配置
TemplateServiceConfiguration templateConfig = new TemplateServiceConfiguration
{
Resolver = new TemplateResolver()
};
Razor.SetTemplateService(new TemplateService(templateConfig));
更新由鬆餅人 這個鏈接https://github.com/Antaris/RazorEngine/issues/61指定模板,呈現字符串,
var templateResolver = Razor.Resolve("Registration.cshtml");
return templateResolver.Run(new ExecuteContext());
還有我,與人相處有問題,使用_Layout
而Layout
工作。
'_Layout'是舊的語法。它在未來的版本中更新爲「佈局」。
你可以很容易地用剃刀做很多事情;然而,這個特定的項目似乎將許多Razor引擎的東西抽象掉了(這是好的和壞的)。在你的情況下,這聽起來像你會更好地實現自己的Razor解決方案(實際上並不壞),然後你可以讓你的模板很容易地拋出異常或拉入其他內容。
例如;通過滾動你自己的解決方案,你可以爲你的剃鬚刀模板創建一個基類,它可以通過調用其他模板來暴露出「部分視圖」的容量。另外,如果某些屬性爲空,則可以執行模型檢查並引發異常。
實現與RazorEngine佈局的最簡單方法是通過佈局在@RenderBody更換你的模板()返回:
var finalHtml = layout.Replace(@"@RenderBody()", templateHtml);
如:
你_Layout.cshtml與典型的@RenderBody()
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html>
<head>
</head>
<body>
<div>
@RenderBody()
</div>
</body>
</html>
Your RazorEngine template MyTemplate.cshtml
@using RazorEngine.Templating
@inherits TemplateBase<myviewmodel>
<h1>Hello People</h1>
<p>@Model</p>
何地,你叫RazorEngine模板:
var TemplateFolderPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "EmailTemplates");
var template = File.ReadAllText(Path.Combine(TemplateFolderPath,"MyTemplate.cshtml"));
var layout = File.ReadAllText(Path.Combine(TemplateFolderPath, "_Layout.cshtml"));
var templateService = new TemplateService();
var templateHtml = templateService.Parse(template, myModel, null, null);
var finalHtml = layout.Replace(@"@RenderBody()", templateHtml);
- 1. RazorEngine - 利用佈局Html.Raw
- 2. TemplateCompilationError與RazorEngine和佈局
- 3. 如何使RazorEngine Parse方法成功使用佈局?
- 4. 如何使用RazorEngine加載外部佈局文件?
- 5. RazorEngine與佈局:對象引用不設置到對象的實例
- 6. 佈局佈局
- 7. @section with RazorEngine
- 8. 佈局,佈局大,佈局正常等
- 9. 在空佈局jframe上佈局佈局
- 10. Android佈局文件夾:佈局,佈局端口,佈局區域
- 11. 使用RazorEngine和TextWriter
- 12. RazorEngine內存使用
- 13. 佈局 - 中心等佈局
- 14. 佈局裏面佈局
- 15. Android的佈局 - 像佈局
- 16. sw320dp佈局塊xlarge佈局
- 17. css佈局佈局錯誤
- 18. Android:相對佈局佈局
- 19. xdpi佈局和hdpi佈局
- 20. Android佈局 - 位置佈局
- 21. Android layoutdisplay,佈局佈局。
- 22. 安卓佈局 - 佈局正常與佈局
- 23. 佈局佈局,頂部佈局的中心背景圖片
- 24. Android如何在兩個佈局頂部佈局佈局
- 25. 如何佈局?使用相對佈局還是線性佈局?
- 26. Qt佈局/小部件交互 - 佈局內的佈局
- 27. 我可以在佈局/合併佈局中使用佈局嗎?
- 28. RazorEngine在testProject中拋出VerificationException
- 29. RazorEngine模板電子郵件
- 30. Mono上的RazorEngine - TemplateCompilationException拋出
我試圖實現在MS博客上面的解決方案,我不斷收到一個計算器例外。我花了整整一天的時間。 – 2012-09-26 22:45:56
我可以給你一個快速的應用程序一起扔,所以你得到的想法 – ministrymason 2012-09-27 09:48:04
https://rapidshare.com/files/3962348204/RazorEngineConsoleApplication.zip它被扔在一起,但肯定你會明白。應用程序的基礎是RazorEngineConsoleApplication \ bin \ Debug,然後將模板複製到那裏。堅持我發佈的例子。 – ministrymason 2012-09-27 10:33:18