好吧,所以我的模型包含 200 多个属性或字段,使用实体框架,这反映到数据库中有 1 行 200 列。在视图中显示此模型时,希望显示仅具有数据或值的字段或属性。
现在我可以检查每一个并检查它是否有价值!但我想知道是否有更好的方法,这样我就不必加载 90% 为空的大厅模型!?
是的,你可以使用反射,这里有一个示例
@{
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>
}
我确实修改了演示也反映了结果
希望对你有帮助
@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>
}