为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