我有这个课程和其中的很多属性
public class Course
{
public int CourseId { get; set; }
public string CourseName { get; set; }
public Universities? UniversityName { get; set;}
public string Summary { get; set; }
*
*
}
查看模型看起来像这样
public class DetailsViewModels
{
public Course DetailsVMCourse;
public string PageTitle;
*
}
和控制器
public IActionResult CourseDetails(int id)
{
DetailsViewModels detailsViewModels = new DetailsViewModels()
{
//loads the course to the view model from a test database
DetailsVMCourse = _courseRepository.FindCourse(id)
};
return View(detailsViewModels);
}
我只想显示模型属性在视图中具有值。目前,我正在每个属性的查看页面上执行此操作。]
@{ if (Model.DetailsVMCourse.Summary != null)
{
<h4>Cource summary</h4>
<p>
@Model.DetailsVMCourse.Summary
</p>
}
}
而不是用!= null来检查每个属性,哪种方法更好而有效。这是我的第一个项目,因此将非常感谢您的帮助。
您可以编写一些使用反射在类中的每个属性上循环的内容,但是我认为您确实不想要那样。这些属性具有不同的类型,并且我确定确实有一些您可能不想显示(ID?)。由于某些类是其他类,因此变得很复杂(UniversityName是一个对象,而不是字符串)。另外,在您的H4标签中,“标题”与媒体资源不同,更易于阅读。因此,我认为您最好的选择是遵循当前的模式,并为每个您要显示的属性及其可读取的标题添加一个区块。
我唯一的其他建议是使用IsNullOrWhiteSpace()而不是对字符串属性进行null检查。这是对字符串的清洁/彻底检查:
if (!String.IsNullOrWhiteSpace(Model.DetailsVMCourse.Summary))
我将使用反射来获取具有不等于null的值的属性,然后使用循环来显示属性及其值。
var populatedProperties = Model.DetailsVMCourse.GetType().GetProperties().Where(prop => prop.GetValue(Model.DetailsVMCourse) != null);
foreach (var prop in populatedProperties){
<h4>@prop.Name</h4>
<p>
@prop.GetValue(Model.DetailsVMCourse);
</p>
}
您可以使用Reflection
遍历Model
属性并找到具有值的属性:
@using System.Reflection;
@{
var modelProperties= Model.GetType().GetProperties();
}
@foreach(System.Reflection.PropertyInfo info in modelProperties){
var value = info.GetValue(Model,null);
if(value!=null){
<h4>@info.Name</h4>
<p>@info.DetailsVMCourse.Summary;</p>
@*-----So on------*@
}
}