【发布时间】:2012-10-30 22:56:29
【问题描述】:
我一直在尝试在我的一个小项目中使用 RazorEngine,但是当我尝试使用模板布局时无法克服这个错误。
无法编译模板。 “对象”不包含定义 'Description' 并且没有扩展方法 'Description' 接受第一个 可以找到“对象”类型的参数(您是否缺少使用 指令还是程序集引用?)
我的设置: 我有这样的模板布局:
<html>
<head>
<title>@Model.Description</title>
</head>
<body>
@RenderBody()
</body>
</html>
然后是这样的页面模板:
@{
_Layout = "Layout.cshtml";
}
<h1>@Model.Description</h1>
这是我用来尝试解决这个问题的测试 Main 函数:
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();
}
}
}
知道我错过了什么吗?
更新:如果我用带有描述属性的 POCO 替换动态模型对象,它会起作用。我还用
尝试了 Parse 的类型化版本动态
、ExpandoObject 和 IDictionary<string, object> 但它们都有相同的错误。
更新: 我在 Github 上发现了这个项目,它似乎以某种方式使它工作: https://github.com/mikoskinen/graze/blob/master/src/core/Graze.cs#L174
【问题讨论】:
-
是否可以使用常规 POCO 作为模型?
-
是的,但我需要它是动态的。
标签: c# razor razorengine