使用带有RazorEngine的Expando对象会引发错误

时间:2011-10-12 00:13:59

标签: c# asp.net-mvc razor

我从帖子中获取params列表并创建IDictionaryObj,我将其存储在其中。在调试模式下,我可以看到我传入的所有键/值,它们显示为此expando对象的属性。但是,当我将该对象传递给RazorEngine的解析方法时,它会抱怨任何提供的属性都不存在。我在这做错了什么?

        dynamic expando = new ExpandoObject();

        var templateModel = expando as IDictionary<String, object>;

        templateModel["To"] = email.To;
        templateModel["From"] = email.From;
        templateModel["Message"] = email.Body;

        var templateData = HttpUtility.ParseQueryString(extraParams);

        foreach (var property in templateData.AllKeys)
        {
            templateModel[property] = templateData[property];
        }

        var mailBody = Razor.Parse(template, templateModel.ToExpando());

最后一行抛出以下错误:

'System.Dynamic.ExpandoObject'不包含'From'的定义

2 个答案:

答案 0 :(得分:0)

猜测你的代码对.ToExpando()有好处,你可能错过了Linq:

using System.Linq;

答案 1 :(得分:-1)

您尚未显示变量模板。

在RazorEngine中使用ExpandoObject时,即使@model指向ExpandoObject,您也需要确保您的模板没有@model,否则您将获得此异常。

如果模板中有@model,则需要将其删除。