获取Expresssion Func的标签<t,u =“”>仅适用于字符串类型</t,>

时间:2014-05-31 07:28:43

标签: asp.net-mvc entity-framework metadata html-helper func

我有一个表达式&lt; Func&lt; TModel,Object&gt;&gt; 我想从模型中的元数据中获取DisplayName。这仅适用于签名为 Func&lt;的TModel,字符串&GT; 即可。的函数功能&LT; TModel,Int&gt; Func&lt; TModel,DateTime&gt; 失败,出现以下错误。

模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式。

具有一些属性的示例元数据类

这是一个示例元数据类,为一些属性提供 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 =&gt; m.Description)按预期返回值“Area”)。但是,在以下情况下会出现上述错误。

public static String CustomDisplayFor<TModel>(HtmlHelper<TModel> html,
    Expression<Func<TModel, Object>> func) 
{ 
   return html.LabelFor(func);
}

有没有办法可以从其他类型的属性中获取 DisplayAttribute 信息?

1 个答案:

答案 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