我正在使用 Razor 引擎:https ://github.com/Antaris/RazorEngine 。
我正在动态创建模型。我试图在模板中包含一个扩展方法,但它可以识别扩展类。我收到以下错误消息“ ‘字符串’不包含‘ToUpperFirstLetter’的定义”
模型创建
dynamic model = new ExpandoObject();
((IDictionary<string, object>)model).Add("Forename", "john");
模板
@using Namespace.Extensions
@{
ViewBag.Title = "Title";
}
Hello @Model.Forename.ToUpperFirstLetter()
扩展类
namespace Namespace.Extensions
{
public static class StringExtensions
{
public static string ToUpperFirstLetter(this string source)
{
return ....removed for abbreviation
}
}
}
剃刀解析
ITemplate template = Razor.Resolve(template, model);
string result = template.Run(new ExecuteContext());
编辑
我还想在 Dynamic ExpandoObject 上创建一个扩展方法。查看模型中的值是否存在。我收到以下错误消息“ System.Dynamic.ExpandoObject'不包含'HasValue'的定义”
扩展类
public static class ExpandoObjectExtensions
{
public static bool HasValue(this ExpandoObject source, string key)
{
return ((IDictionary<String, object>)source).ContainsKey(key);
}
}
扩展使用
@if(Model.HasValue("Hello"))
{
@Model.Hello
}
编辑两个
以下工作并进入扩展方法
var o = new object();
var bool = o.HasValue("value");
动态模型仍然抛出异常 - RuntimeBinderException: 'System.Dynamic.ExpandoObject' 不包含 'HasValue' 的定义
dynamic model = new ExpandoObject();
var bool = model.HasValue("value");