我有一个表达式< Func< TModel,Object>> 我想从模型中的元数据中获取DisplayName。这仅适用于签名为 Func<的TModel,字符串> 即可。的函数功能< TModel,Int> 或 Func< TModel,DateTime> 失败,出现以下错误。
模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式。
具有一些属性的示例元数据类
这是一个示例元数据类,为一些属性提供 DisplayAttribute 。
public class TestMetadata
{
[Display(Name = "Area")]
public Object Description { get; set; }
[Display(Name = "Date Property")]
public Object Date { get; set; }
[Display(Name = "Int Property")]
public Object Length { get; set; }
}
提取DisplayAttribute名称属性的功能
此函数适用于字符串的返回值(示例 CustomDisplayFor(Html,m => m.Description)按预期返回值“Area”)。但是,在以下情况下会出现上述错误。
public static String CustomDisplayFor<TModel>(HtmlHelper<TModel> html,
Expression<Func<TModel, Object>> func)
{
return html.LabelFor(func);
}
有没有办法可以从其他类型的属性中获取 DisplayAttribute 信息?
答案 0 :(得分:1)
好的,我发现当你为返回值添加另一个Type Reference时,这是有效的。
签名成为
public static String CustomDisplayFor<TModel,TResult>(HtmlHelper<TModel> html,
Expression<Func<TModel, TResult>> func)
{
return html.LabelFor(func);
}
调用代码相同
CustomDisplayFor(Html,m => m.Date) // This now works => "Date Property" returned