gpt4 book ai didi

asp.net-mvc-2 - 从 MCV2 View 中的模型集合中读取 DataAnnotations

转载 作者:行者123 更新时间:2023-12-04 21:25:16 24 4
gpt4 key购买 nike

在我的 MVC2 AdminArea 中,我想为我的每个域模型创建一个概览表。
我对这些域模型对象的属性使用如下所示的 DataAnnotations:

[DisplayName("MyPropertyName")]
public string Name { get; set; }

现在我的问题是:如果我的 View 收到域模型的集合,我如何访问 DisplayName 属性?我需要这个来构建在通常之外定义的表头
<% foreach (var item in Model) { %>

环形。在这个循环中我可以写
<%: Html.LabelFor(c => item.Name) %>

但是有没有办法使用项目集合而不是具体实例来访问这些信息?

提前致谢!

最佳答案

有一个ModelMetaData具有名为 FromLambdaExpression 的静态方法的类.如果您调用它并传入您的属性(property),以及您的 ViewData ,它将返回一个 ModelMetaData 的实例.该类有一个 DisplayName应该给你你需要的属性(property)。您还可以从此对象获取其他元数据信息。

例如,您可以创建一个空的 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;
First()即使您没有实际的方法调用也不会中断 Person对象,因为 lambda 只是试图找到您想要元数据的属性。同样,您可以为单个 Person 执行此操作目的:
//This would typically be just your view model data.    
ViewDataDictionary<Person> data = new ViewDataDictionary<Person>();

ModelMetadata result = ModelMetadata.FromLambdaExpression(p => p.Name, data);

您可以使用帮助程序或扩展方法显着清理它,但这应该使您走上正确的道路。

关于asp.net-mvc-2 - 从 MCV2 View 中的模型集合中读取 DataAnnotations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4479032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com