如何动态显示模型中每个属性的DisplayName和值
本文关键字:属性 DisplayName 和值 动态显示 模型 | 更新日期: 2023-09-27 18:03:10
在某些情况下,当属性比平时更多时,复制和过去一些代码来显示模型的所有属性是痛苦的,所以我想知道是否有一种方法来动态显示模型的所有属性。例如,我们有这样的TestModel:
TestModel.cs
[Display(Name = "نام")]
[Required]
public string Name { get; set; }
[Display(Name = "ایمیل")]
[Required]
public string Email { get; set; }
[Display(Name = "شماره تماس")]
[Required]
public string PhoneNumber { get; set; }
现在我想在razor中显示这个模型的DisplayName和Value,例如像这样:
TestRazor.cshtml
@foreach (var Item in Model.GetType().GetProperties())
{
<div class="row">
<p class="label">@Item.DisplayName</p>
<p class="value">@Item.Value</p>
</div>
<br />
<br />
}
您可以像这样获得每个属性的显示名称和值:
@using System.ComponentModel.DataAnnotations
@using System.Reflection
@foreach (var item in Model.GetType().GetProperties())
{
var label = item.GetCustomAttribute<DisplayAttribute>().Name;
var value = item.GetValue(Model);
<div class="row">
<p class="label">@label</p>
<p class="value">@value</p>
</div>
<br />
<br />
}
我认为你应该使用助手@Html.EditorForModel()
和@Html.DisplayForModel()
。你可以在这里阅读。
这个助手生成编辑和查看模板,默认情况下显示所有模型属性和属性。
但是如果你想改变默认的html生成这个方法,你可以很容易地创建自己的EditorTemplates
和DisplayTemplates
,如果你想改变整个模型的html或使用UIHint
属性,如果你需要改变视图只是一些属性。
在视图中输入@Html.DisplayForModel()
就可以得到模型的所有属性