7

我想将以下 Razor 模板与RazorEngine一起使用:

@{
    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 分支中。查看代码我看到引用布局和部分的代码,但布局代码似乎依赖于按名称解析模板,而我正在尝试做的甚至不需要解析模板 - 我只需要它来应对布局 = null。该代码还包括一个 MvcTemplateBase,它似乎在 Web 项目中提供了一个 HtmlHelper - 但它是该项目中的唯一类,并且在 Web 或核心项目中的任何地方都没有引用。

这个类似的问题: RazorEngine issues with @Html

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

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

4

1 回答 1

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));
}

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

var config = new RazorEngine.Configuration.TemplateServiceConfiguration
    {
        BaseTemplateType = typeof(MyTemplateBase<>),
        Activator = new MyActivator()
    };
于 2014-05-21T02:15:20.763 回答