【问题标题】:Show only if a ViewModel has value in MVC仅当 ViewModel 在 MVC 中具有值时显示
【发布时间】:2020-01-28 23:32:02
【问题描述】:

我有这个类和很多属性

    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,还有什么更好更有效的方法。这是我的第一个项目,因此您的帮助将不胜感激。

【问题讨论】:

  • 您可以像现在一样在视图中检查它。或者您可以在从操作返回之前检查它,并可以根据模型的结果选择不同的视图。

标签: c# asp.net-mvc asp.net-core-mvc asp.net-mvc-viewmodel


【解决方案1】:

您可以编写一些内容,使用反射遍历类中的每个属性,但我认为您真的不希望这样。这些属性有不同的类型,我相信有些你可能实际上不想显示(ID?)。有些是其他类,它变得复杂(UniversityName 是一个对象,而不是一个字符串)。此外,在您的 H4 标签中,“标题”与属性不同,它更易于阅读。所以我认为你最好的选择是遵循你当前的模式,并为你真正想要显示的每个属性设置一个块,以及它的人类可读的标题。

我唯一的其他建议是使用 IsNullOrWhiteSpace() 而不是对字符串属性进行 null 检查。这是对字符串的更清洁/彻底的检查:

if (!String.IsNullOrWhiteSpace(Model.DetailsVMCourse.Summary))

【讨论】:

  • 你是对的,不想使用反射,因为我的属性是不同的类型。感谢您的帮助。 :)
  • @aries,没问题。如果您认为这是一个足够的答案,请将其标记为关闭此问题的答案。
【解决方案2】:

我会使用反射来获取值不等于 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>
}

【讨论】:

  • 虽然属性是不同的类型,但是我可以在不同的类中使用它。谢谢你的主意。 ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
  • 1970-01-01
相关资源
最近更新 更多