c# – ASP.NET MVC使用数据注释迭代模型属性
问题描述
我的问题类似于this question,但不是通过反射(由ModelMetadata.DisplayName处理)将数据注释应用于属性Name我将它们应用于值(不由ModelMetadata处理). 详细说明 在ASP.NET MVC程序的上下文中. public class Model { public string FirstName { get; set; } public string LastName { get; set; } public string NickName { get; set; } public string Address { get; set; } public int Phone { get; set; } [Display(Name = "Start Date")] [DataType(DataType.Date)] [DisplayFormat(ApplyFormatInEditMode = true,DataFormatString = "{0:dd/MM/yyyy}")] public DateTime StartDate { get; set } [Display(Name = "End Date")] [DataType(DataType.Date)] [DisplayFormat(ApplyFormatInEditMode = true,DataFormatString = "{0:dd/MM/yyyy}")] public DateTime EndDate { get; set } } 然后假设此模型用于至少5个不同的视图,其中每个属性的值必须完整显示. (有时候对于每一个例子,其他时间为少数,其他时间为一个). 我可以手动列出它自己的每个Property访问 但是,如果稍后Model的定义扩展为包含新属性(如描述,关系和可靠性),那对我没有帮助.然后我需要手动更新完整模型列表的每次出现. 我可以使用反射来迭代PropertyInfo的列表,并且不必通过使用手动列出每个属性 但DisplayFor(x)不支持像x => property.GetValue(item)那样复杂的表达式,这意味着我丢失了将DateTime格式化为的数据注释 问题解决方案 到目前为止,我已经考虑(并在某些情况下尝试)以下解决方案: > [失败]手动制作一个模仿@ property.GetValue(item)功能的Expression >对其执行一个方法,在插入视图元素之前手动检索并实现其上的注释数据,如this question所示,或 >重构Model类以仅包含’Prop’实例的列表(SortedList?),其中’Prop’是表示具有Name和Value元素的Property的类. 最后一个解决方案将破坏 [编辑] 问题 这是目前,纯粹是一个学习练习,但我想知道…… 解决方法
也许类似于:
@foreach (var property in Model.GetType().GetProperties()) { <li>@property.GetValue(Model,null)</li> } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |