2 개의 부분 header.cshtml과 footer.cshtml을 포함하는 template.cshtml을 만들었습니다.RazorEngine과 분리 된 뷰 모델로 여러 템플릿 사용
는 렌더링되는 경우는 다음과 같습니다
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>
내가 해결책에 대해 좋아하지 않는 것은 viewmodels 서로에 포함되어야한다는 것입니다.
각 뷰 모델을 분리하고 싶습니다. 다른 뷰 모델을 구분해서는 안됩니다. 그 이유는 콘텐츠가 일반적인 머리말이나 꼬리말을 알지 못하거나 일반 머리말/꼬리말의 부모가되어서는 안되기 때문입니다.
많은 다른 '콘텐츠'보기 모델로 템플릿을 다시 사용하고 싶기 때문에.
기존 코드를 기반으로이 작업을 수행하려면 정확히 무엇을 변경해야합니까?
참고 : RazorMachine 네임 스페이스를 읽으면 돈`t이
당신은 이미'@ 그래서 그냥 다른 곳에 보관 include' A의 모델을 제공하고 ViewBag.Header @으로 viewbag에 액세스 할 수 있습니다 모델에 들어 있지 않습니까? –
Include를 호출하고 모델을 같은 시간에 통과시키지 않으려면 어떻게해야합니까? 샘플 코드를 들려 주시겠습니까? – HelloWorld
다른 곳에서 모델을 제공하십시오. 그것은 당신이보기에주는 것과 같은 모델 안에있을 필요는 없습니다. 또는 세 모델을 캡슐화하는 간단한 모델을 항상 밀어 넣을 수 있습니다. 이렇게하면 모델을 분리 할 수 있습니다. –