MVC 显示仅有价值的模型属性?

问题描述 投票:0回答:2

好吧,所以我的模型包含 200 多个属性或字段,使用实体框架,这反映到数据库中有 1 行 200 列。在视图中显示此模型时,希望显示仅具有数据或值的字段或属性。

现在我可以检查每一个并检查它是否有价值!但我想知道是否有更好的方法,这样我就不必加载 90% 为空的大厅模型!?

c# asp.net asp.net-mvc entity-framework asp.net-mvc-5
2个回答
2
投票

是的,你可以使用反射,这里有一个示例

@{
    var properties = Model.GetType().GetProperties();
}

@foreach(System.Reflection.PropertyInfo info in properties){
   var value = info.GetValue(Model,null);
   if(value!=null){
       <b>@info.Name</b> <i>@value</i>
   }
}

这里是工作demo

在演示中,我设置了问题值并将答案属性保留为默认“null”,结果将显示问题而不会显示答案,因为它具有空值

编辑 获取显示属性值,在这里你可以做什么

// to get the display Name
var da =info.GetCustomAttributes(typeof(DisplayAttribute),false)
            .Cast<DisplayAttribute>();
if(da.Count()>0) //to ensure that there is a [Display attribute
{
        <p>Display Name:<i>@da.First().Name</i></p>
}

我确实修改了演示也反映了结果

希望对你有帮助


0
投票
@foreach (var property in ViewData.ModelMetadata.Properties.Where(p => p.PropertyGetter(Model) != null)) {
    <p><b>@property.GetDisplayName()</b> <i>@(property.IsEnumerableType ? string.Join(',', property.PropertyGetter(Model)) : property.PropertyGetter(Model))</i></p>
}
© www.soinside.com 2019 - 2024. All rights reserved.