为Expresssion Func <T,U>获取标签仅适用于字符串类型

我有一个函数需要一个Expression <Func <TModel,Object >> ,我想从模型中的元数据中获取DisplayName。 这仅适用于签名为Func <TModel,String>的表达式。 Func <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信息?


好吧,我发现当你为返回值添加另一个类型引用时,这是有效的。

签名成为

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
链接地址: http://www.djcxy.com/p/19085.html

上一篇: Get Label for Expresssion Func<T, U> Only Works for String Type

下一篇: MVC Html Helper: modelmetadata from string expression