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视图?
该Layout
属性和Html
助手不是 的一部分TemplateBase
,并且其实现是最新版本(v3.4.1)MvcTemplateBase
的一部分,看起来不完整(似乎没有初始化助手?)。您需要创建自己的基本模板来实现这些功能。RazorEngine
InitHelpers
正如您所指出的,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)