我创建了一个template.cshtml,其中包含2个partials header.cshtml和footer.cshtml。
渲染时,它看起来像这样:
IRazorEngineService service = RazorEngine.Engine.Razor;
string _webPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "views");
var config = new TemplateServiceConfiguration
{
//Use this template manager when loading from template files.
TemplateManager = new ResolvePathTemplateManager(new[] { _webPath })
};
service = RazorEngineService.Create(config);
ITemplateKey key = service.GetKey("template");
service.Compile("header", typeof(HeaderViewModel));
service.Compile("footer", typeof(FooterViewModel));
var model = new ContentViewModel();
model.Content = "This is the content";
model.FooterViewModel = new FooterViewModel();
model.HeaderViewModel = new HeaderViewModel();
model.FooterViewModel.Footer = "footer";
model.HeaderViewModel.Header = "header";
var html = service.RunCompile(key, model.GetType(), model);
template.cshtml
@model RazorMachineTest.ContentViewModel
<html>
<body>
<header>
@Include("header", @Model.HeaderViewModel, typeof(RazorMachineTest.HeaderViewModel))
</header>
<h1>@Model.Content</h1>
<footer>
@Include("footer", @Model.FooterViewModel, typeof(RazorMachineTest.FooterViewModel))
</footer>
</body>
</html>
header.cshtml
@using RazorEngine
@using RazorMachineTest
<b>I am inside the</b>
<span>@Model.Header</span>
footer.cshtml
@using RazorEngine
@using RazorMachineTest
<b>I am inside the </b>
<span>@Model.Footer</span>
我不喜欢的解决方案是视图模型必须相互包含。
我想将每个视图模型分开,一个不应该知道另一个。原因是内容不应该知道一般页眉或页脚,或者不应该是一般页眉/页脚的父级。
因为我想重复使用具有许多不同“内容”视图模型的模板。
根据我现有的代码,我到底需要做些什么来改变这项工作?
注意:如果您阅读RazorMachine命名空间,那就不会感到困惑,那就是测试...
答案 0 :(得分:0)
您可以将页眉/页脚的内容放入Viewbag
var viewBag = new DynamicViewBag();
viewBag.AddValue("Footer", "footer");
viewBag.AddValue("Header", "header");
var html = service.RunCompile(key, model.GetType(), model, viewBag);
然后在模板中,您可以使用@ ViewBag.Header
访问viewbaghttps://antaris.github.io/RazorEngine/TemplateBasics.html#Supported-syntax