Search code examples
asp.net-mvcrazorrazorengine

Building Custom Base Templates razor engine


I am using razor engine to parse .cshtml files. I am trying to change the base template file to System.Web.WebPages.WebPageBase. I have found out that razor engine has this thing where I can set the base template

config.BaseTemplateType = typeof(MyCustomTemplateBase<>);

The issue is that I can't set it directly to System.Web.WebPages.WebPageBase. So I have to make my own custom template base which is like this

public abstract class MyCustomTemplateBase<T> : WebPageRenderingBase
{
    public override abstract HelperResult RenderPage(string path, params object[] data);
}

I only want RenderPage function but when I run the app it gives me these erros

error: (25, 18) 'CompiledRazorTemplates.Dynamic.RazorEngine_e15164c444b34d6d84d05aef3c711cff' does not implement inherited abstract member 'CordovaBuild.MyCustomTemplateBase<dynamic>.RenderPage(string, params object[])'
 - error: (25, 18) 'CompiledRazorTemplates.Dynamic.RazorEngine_e15164c444b34d6d84d05aef3c711cff' does not implement inherited abstract member 'System.Web.WebPages.WebPageRenderingBase.Layout.get'
 - error: (25, 18) 'CompiledRazorTemplates.Dynamic.RazorEngine_e15164c444b34d6d84d05aef3c711cff' does not implement inherited abstract member 'System.Web.WebPages.WebPageRenderingBase.Layout.set'
 - error: (25, 18) 'CompiledRazorTemplates.Dynamic.RazorEngine_e15164c444b34d6d84d05aef3c711cff' does not implement inherited abstract member 'System.Web.WebPages.WebPageRenderingBase.PageData.get'
 - error: (25, 18) 'CompiledRazorTemplates.Dynamic.RazorEngine_e15164c444b34d6d84d05aef3c711cff' does not implement inherited abstract member 'System.Web.WebPages.WebPageRenderingBase.Page.get'
 - error: (25, 18) 'CompiledRazorTemplates.Dynamic.RazorEngine_e15164c444b34d6d84d05aef3c711cff' does not implement inherited abstract member 'System.Web.WebPages.WebPageRenderingBase.ExecutePageHierarchy()'
 - error: (25, 18) 'CompiledRazorTemplates.Dynamic.RazorEngine_e15164c444b34d6d84d05aef3c711cff' does not implement inherited abstract member 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)'
 - error: (25, 18) 'CompiledRazorTemplates.Dynamic.RazorEngine_e15164c444b34d6d84d05aef3c711cff' does not implement inherited abstract member 'System.Web.WebPages.WebPageExecutingBase.Write(object)'
 - error: (25, 18) 'CompiledRazorTemplates.Dynamic.RazorEngine_e15164c444b34d6d84d05aef3c711cff' does not implement inherited abstract member 'System.Web.WebPages.WebPageExecutingBase.WriteLiteral

Solution

  • You probably want to extend the RazorEngine TemplateBase<T> classes instead of WebPageRenderingBase.

    See https://antaris.github.io/RazorEngine/TemplateBasics.html#Extending-the-template-Syntax for details.

    The problem is that RazorEngine expects "its" own interface and doesn't depend on System.Web.

    matthid, a RazorEngine contributor.