Ich habe eine template.cshtml erstellt, die 2 Teillisten header.cshtml und footer.cshtml enthält.Verwenden Sie mehrere Vorlagen mit getrennten Viewmodel mit RazorEngine
Wenn es gemacht wird, es sieht wie folgt aus:
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>
Was ich über die Lösung nicht gefällt ist, dass die Viewmodels ineinander enthalten sein müssen.
Ich möchte eine Trennung von jedem Viewmodel haben, sollte man nicht die andere kennen. Der Grund dafür ist, dass der Inhalt keine allgemeine Kopf- oder Fußzeile kennen sollte oder nicht der Überbegriff einer allgemeinen Kopf-/Fußzeile sein sollte.
Weil ich die Vorlage mit vielen verschiedenen "Content" Viewmodels wiederverwenden möchte.
Was genau muss ich ändern, damit diese Arbeit auf meinem bestehenden Code basiert?
Hinweis: Don`t verwirrt, wenn man RazorMachine Namespaces gelesen, dass für die Prüfung war ...
Sie sind bereits das Modell in der '@ geben include' so einfach speichern sie anderswo ein Und nicht im Modell? –
Wie kann ich das Include aufrufen und nicht gleichzeitig das Modell übergeben? Hast du bitte einen Beispielcode? – HelloWorld
Sie geben das Modell von woanders. Es muss nicht in demselben Modell sein, das Sie den Ansichten geben. Oder Sie können einfach immer ein einfaches Modell drücken, das die drei Modelle kapselt, so dass sie getrennt sein können. –