Layout RazorEngine-使用布局和Html.Raw

Layout RazorEngine-使用布局和Html.Raw,layout,razor,html-helper,razorengine,Layout,Razor,Html Helper,Razorengine,我想使用以下Razor模板: 当我调用它时,我得到了两个错误——一个抱怨它不能处理布局,另一个抱怨它不知道如何处理Html助手 这里还有其他问题和答案表明这在v3中是可能的,我正在使用NuGet上的当前包-v3.0.8-但不清楚这是如何实现的。现在我这样称呼它: string html = RazorEngine.Razor.Parse(File.ReadAllText(path)); 其他答案建议首先使用Razor.SetBaseTemplate,它不会出现在当前源代码或git上的3.0分支

我想使用以下Razor模板:

当我调用它时,我得到了两个错误——一个抱怨它不能处理布局,另一个抱怨它不知道如何处理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或核心项目中没有引用

这个类似的问题:

只需链接到主页,说你可以在那里找到更多-主页只是一个简短的句子描述该项目


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

Layout属性和
Html
帮助程序不是
TemplateBase
的一部分,作为
RazorEngine
最新版本(v3.4.1)的一部分的
MvcTemplateBase
的实现似乎不完整(
InitHelpers
似乎没有初始化helpers?)。您需要创建自己的基本模板来实现这些功能

如您所述,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));
}

哦,你在使用RazorEngine…需要记住的一点是Razor不是MVC。新的RazorEngine已经做了很多工作,但是Antaris最近非常忙。你应该能够使用文件顶部的
@inherits MvcTemplateBase
来使用它。谢谢你的建议。我意识到Razor和MVC是分开的,但我的目标是al将在普通ASP.Net管道内外使用相同的MVC Razor模板。NuGet上的版本不包含名为MvcTemplateBase的类。Git上的最新版本包含该类,但它不是通用的-它只是MvcTemplateBase。如果我添加@inherits RazorEngine.Razor.MvcTemplateBase这样的行,我会在TemplateService.SetMod中遇到异常elExplicit抱怨模板类型没有名为Model.Ideas的属性?嗯,您使用的是哪个版本的RazorEngine?或者您是否将MvcTemplateBase派生为自己的类?当前源代码没有MvcTemplateBase的通用版本:这是MvcTemplateBase的自制实现。上面的要点是演示事实上,你仍然可以设置一个基础模板来继承你的所有视图,这将允许你实现Html助手、基础布局功能,或者任何你需要的东西,RazorEngine的TemplateBase并没有提供现成的功能。澄清了我上面的答案。我之前注意到这个问题已经有2年多的历史了,但我认为这个问题仍然存在我会回答的。如果有什么不清楚的地方请告诉我。也许这仍然可以帮助别人。
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));
}
var config = new RazorEngine.Configuration.TemplateServiceConfiguration
    {
        BaseTemplateType = typeof(MyTemplateBase<>),
        Activator = new MyActivator()
    };