我想在RazorEngine使用以下Razor模板:
@{
Layout = null;
}
@Html.Raw(MyNamespace.MyClass.SomePropertyWithHtml)
当我调用它时,我得到2个错误 - 一个抱怨它无法处理布局,另一个抱怨它不知道如何处理Html帮助器。
这里还有其他问题和答案表明这可以在v3中使用,而我正在使用NuGet上的当前软件包 - v3.0.8 - 但目前尚不清楚这是如何完成的。目前我这样称呼它:
string html = RazorEngine.Razor.Parse(File.ReadAllText(path));
其他答案建议首先使用Razor.SetBaseTemplate,它不会出现在当前源或git上的3.0分支中。看代码我看到代码引用布局和部分,但布局代码似乎依赖于按名称解析模板,而我正在尝试做的甚至不需要解析模板 - 我只需要它来应对使用Layout = null。该代码还包括一个MvcTemplateBase,它似乎在Web项目中提供了HtmlHelper - 但它是该项目中唯一的类,并未在Web或Core项目中的任何位置引用。
这个类似的问题: RazorEngine issues with @Html
只需链接到主页,告诉您可以在那里找到更多信息 - 主页只是描述该项目的简短句子。
那么,如何用RazorEngine v3.0解析上面的Razor视图呢?
答案 0 :(得分:2)
Layout
属性和Html
助手不是TemplateBase
的一部分,MvcTemplateBase
的实现是{{1}的最新版本的一部分(v3.4.1)看起来不完整(RazorEngine
似乎没有初始化帮助程序?)。您需要创建自己的基本模板来实现这些功能。
如您所述,v3 +版本不包含InitHelpers
方法。您可以在当前版本中设置基本模板类型,如下所示:
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));
}
的自定义实现中覆盖CreateInstance
可能会有所帮助,可以像IActivator
一样提供给TemplateServiceConfiguration
:
BaseTemplateType