RazorEngine - 使用Layout和Html.Raw

时间:2012-05-03 10:15:51

标签: layout razor html-helper razorengine

我想在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视图呢?

1 个答案:

答案 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