Sha*_*les 5 views data-annotations asp.net-mvc-2
在我的MVC2 AdminArea中,我想为每个域模型创建一个概述表.我正在使用如下所示的DataAnnotations来获取这些域模型对象的属性:
[DisplayName("MyPropertyName")]
public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:如果我的视图收到我的域模型的集合,我如何访问DisplayName属性?我需要这个来构建在通常之外定义的表头
<% foreach (var item in Model) { %>
Run Code Online (Sandbox Code Playgroud)
环.在这个循环中,我可以写
<%: Html.LabelFor(c => item.Name) %>
Run Code Online (Sandbox Code Playgroud)
但有没有办法使用项目集合而不是具体实例来访问此信息?
提前致谢!
有一个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;
Run Code Online (Sandbox Code Playgroud)
First()即使您没有实际对象,该方法调用也不会中断Person,因为 lambda 只是尝试查找您想要元数据的属性。同样,您可以为单个Person对象设置 this:
//This would typically be just your view model data.
ViewDataDictionary<Person> data = new ViewDataDictionary<Person>();
ModelMetadata result = ModelMetadata.FromLambdaExpression(p => p.Name, data);
Run Code Online (Sandbox Code Playgroud)
您可以使用帮助程序或扩展方法来显着清理它,但这应该会让您走上正确的道路。
| 归档时间: |
|
| 查看次数: |
608 次 |
| 最近记录: |