-
Notifications
You must be signed in to change notification settings - Fork 86
Strongly typed model
Alexander Selishchev edited this page Aug 2, 2021
·
11 revisions
RazorEngineCode uses slightly different approach on strongly typed model, instead model it forces you to use template base: either existing RazorEngineTemplateBase<T>
or your own that inherits RazorEngineTemplateBase
.
With this approach you are not bounded by typical MVC keywords and can easily introduce your own.
IRazorEngine razorEngine = new RazorEngine();
string content = "Hello @Model.Name";
// yeah, heavy definition
IRazorEngineCompiledTemplate<RazorEngineTemplateBase<TestModel>> template = razorEngine.Compile<RazorEngineTemplateBase<TestModel>>(content);
string result = template.Run(instance =>
{
instance.Model = new TestModel()
{
Name = "Hello",
Items = new[] {3, 1, 2}
};
});
Console.WriteLine(result);
public class CustomTemplateBase : RazorEngineTemplateBase
{
public int A { get; set; }
public string B { get; set; }
public new MyModel Model { get; set; }
public string Decorator(object value)
{
return "-=" + value + "=-";
}
}
string content = @"Hello @A, @B, @Decorator(123) @Model.Membership.Level";
IRazorEngine razorEngine = new RazorEngine();
IRazorEngineCompiledTemplate<CustomTemplateBase> template = razorEngine.Compile<CustomTemplateBase>(content);
string result = template.Run(instance =>
{
instance.A = 10;
instance.B = "Alex";
instance.Model = model;
});
Console.WriteLine(result);