使用RazorEngine和Layouts的TemplateCompilationError

PPC*_*der 10 c# razor razorengine

我一直试图在我的一个小项目中使用RazorEngine但是当我尝试使用模板布局时无法通过这个错误.

无法编译模板.'object'不包含'Description'的定义,也没有扩展方法'Description'可以找到接受'object'类型的第一个参数(你是否缺少using指令或汇编引用?)

我的设置: 我有这样的模板布局:

<html>
<head>
    <title>@Model.Description</title>
</head>
<body>
    @RenderBody()
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

然后是一个如下所示的页面模板:

@{
    _Layout = "Layout.cshtml";
}
<h1>@Model.Description</h1>
Run Code Online (Sandbox Code Playgroud)

这是一个测试主要功能,我正在尝试解决这个问题:

    static void Main(string[] args)
    {
        // Configuration for RazorEngine
        var config = new TemplateServiceConfiguration
        {
            EncodedStringFactory = new RawStringFactory(),

            Resolver = new DelegateTemplateResolver(name =>
            {
                var file = name;
                var content = File.ReadAllText("Templates/" + file);
                return content;
            })
        };

        // Try to render output using Razor
        using (var service = new TemplateService(config))
        {
            string template = File.ReadAllText("Templates/Default.cshtml");

            dynamic model = new ExpandoObject();
            model.Description = "This is a test";
            string result = service.Parse(template, model);
            Console.WriteLine(result);
            if (Debugger.IsAttached)
            {
                Console.ReadLine();
            }

        }
    }
Run Code Online (Sandbox Code Playgroud)

知道我错过了什么吗?

更新:如果我用带有Description属性的POCO替换动态模型对象,它可以工作.我也尝试过Parse的打字版本

动态

,ExpandoObject,和IDictionary<string, object>,但他们都有同样的错误.

更新: 我在Github上发现这个项目似乎让它以某种方式工作:https: //github.com/mikoskinen/graze/blob/master/src/core/Graze.cs#L174

Ply*_*223 4

我认为使用模板服务的重载更合适,Parse该重载采用 aViewBagViewBag在您的视图中使用 the 而不是模型。

编辑:

public virtual string Parse(string razorTemplate, object model, DynamicViewBag viewBag, string cacheName)
Run Code Online (Sandbox Code Playgroud)