在我的 MVC2 AdminArea 中,我想为每个域模型创建一个概述表。
我正在使用如下所示的 DataAnnotations 作为这些域模型对象的属性:
[DisplayName("MyPropertyName")]
public string Name { get; set; }
现在我的问题是:如果我的视图收到域模型的集合,如何访问 DisplayName 属性?我需要它来构建在通常情况之外定义的表头
<% foreach (var item in Model) { %>
环形。在这个循环中我可以写
<%: Html.LabelFor(c => item.Name) %>
但是有没有办法使用项目集合而不是具体实例来访问此信息?
提前致谢!
有一个ModelMetaData
具有名为的静态方法的类FromLambdaExpression
。如果您调用它并传递您的财产以及您的ViewData
,它将返回一个实例ModelMetaData
。那个班级有一个DisplayName
应该可以满足您所需的财产。您还可以从此对象获取其他元数据信息。
例如,您可以创建一个空的ViewDataDictionary
对象获取此信息。它可以为空,因为ModelMetaData
实际上并不使用实例,它只需要泛型类来定义所使用的类型。
//This would typically be just your view model data.
ViewDataDictionary<IEnumerable<Person>> data = new ViewDataDictionary<IEnumerable<Person>>();
ModelMetadata result = ModelMetadata.FromLambdaExpression(p => p.First().Name, data);
string displayName = result.DisplayName;
The First()
即使您没有实际的方法调用也不会中断Person
对象,因为 lambda 只是试图找到您想要元数据的属性。同样,您可以将其设置为单个Person
object:
//This would typically be just your view model data.
ViewDataDictionary<Person> data = new ViewDataDictionary<Person>();
ModelMetadata result = ModelMetadata.FromLambdaExpression(p => p.Name, data);
您可以使用帮助程序或扩展方法来显着清理它,但这应该会让您走上正确的道路。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)