RazorEngine - 使用Layout和Html.Raw

Chr*_*ini 7 layout html-helper razor razorengine

我想在RazorEngine中使用以下Razor模板:

@{
    Layout = null;
}

@Html.Raw(MyNamespace.MyClass.SomePropertyWithHtml)
Run Code Online (Sandbox Code Playgroud)

当我调用它时,我得到2个错误 - 一个抱怨它无法处理布局,另一个抱怨它不知道如何处理Html帮助器.

还有其他问题和答案在这里建议这可能在v3中,我正在使用NuGet上的当前包 - v3.0.8 - 但目前尚不清楚这是如何完成的.目前我这样称呼它:

string html = RazorEngine.Razor.Parse(File.ReadAllText(path));
Run Code Online (Sandbox Code Playgroud)

其他答案建议首先使用Razor.SetBaseTemplate,它不出现在当前源代码或git上的3.0分支中.望着代码我看到代码引用布局和路段,但出现的布局代码依赖于解决由名称的模板,而我正在试图做的甚至没​​有需要解决的模板 - 我只需要它来应付使用Layout = null.该代码还包含似乎提供在Web项目中的一个的HtmlHelper MvcTemplateBase - 但它在该项目中唯一的类,而不是在网络或核心项目的任何地方引用.

这个类似的问题: RazorEngine与@Html有关

只需链接到主页,您可以在那里找到更多信息 - 主页只是描述项目的简短句子.

那么,如何用RazorEngine v3.0解析上面的Razor视图?

jdm*_*air 2

Layout属性和Html助手不是 的一部分TemplateBase,并且其实现是最新版本(v3.4.1)MvcTemplateBase的一部分,看起来不完整(似乎没有初始化助手?)。您需要创建自己的基本模板来实现这些功能。RazorEngineInitHelpers

正如您所指出的,v3+ 版本不包含Razor.SetBaseTemplate方法。您可以在当前版本中设置基本模板类型,如下所示:

var config = new RazorEngine.Configuration.TemplateServiceConfiguration
    {
        BaseTemplateType = typeof(MyTemplateBase<>)
    };

using (var service = new RazorEngine.Templating.TemplateService(config))
{
    Razor.SetTemplateService(service);
    return MvcHtmlString.Create(Razor.Parse<TModel>(templateText, model));
}
Run Code Online (Sandbox Code Playgroud)

如果您需要初始化帮助程序,CreateInstance在 的自定义实现中覆盖可能会有所帮助IActivator,可以将其提供给TemplateServiceConfiguration类似的BaseTemplateType

var config = new RazorEngine.Configuration.TemplateServiceConfiguration
    {
        BaseTemplateType = typeof(MyTemplateBase<>),
        Activator = new MyActivator()
    };
Run Code Online (Sandbox Code Playgroud)