如何动态显示模型中每个属性的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 />
}

如何动态显示模型中每个属性的DisplayName和值

您可以像这样获得每个属性的显示名称和值:

@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生成这个方法,你可以很容易地创建自己的EditorTemplatesDisplayTemplates,如果你想改变整个模型的html或使用UIHint属性,如果你需要改变视图只是一些属性。

在视图中输入@Html.DisplayForModel()就可以得到模型的所有属性