Razor エンジンhttps://github.com/Antaris/RazorEngineを使用して、メール テンプレートの本文を解析しています。レイアウトを定義して他の .cshtml ファイルを含めることはできますか? たとえば、共通のヘッダーとフッターです。
19311 次
4 に答える
55
次の 2 つの投稿の助けを借りて、共通のテンプレートとレイアウトが機能するようになりました。
これが私の解決策です:
解決策 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 メソッドで TemplateBase を拡張する
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);
}
}
Razor 構成
BaseTemplateType を TemplateBaseExtensions クラスに設定します
TemplateServiceConfiguration templateConfig = new TemplateServiceConfiguration
{
BaseTemplateType = typeof(TemplateBaseExtensions<>)
};
Razor.SetTemplateService(new TemplateService(templateConfig));
ソリューション 2を編集します。
TemplateResolver を使用している場合。RenderPart は必要ありません。代わりに @Include を使用してください
フッター
@section Footer
{
@Include("Footer.cshtml")
}
リゾルバ
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));
The Muffin Man による更新 テンプレートを指定して文字列をレンダリングする
var templateResolver = Razor.Resolve("Registration.cshtml");
return templateResolver.Run(new ExecuteContext());
また、私は、このリンクhttps://github.com/Antaris/RazorEngine/issues/61_Layout
の他のユーザーと一緒に、使用中に問題が発生しLayout
ました。
「_Layout」は古い構文です。今後のリリースで「レイアウト」に更新されました。
于 2012-08-03T15:39:09.057 に答える