我是ASP的新手。净MVC。我在理解ViewModel的目的方面有一个问题。

什么是ViewModel,为什么我们需要一个ASP的ViewModel。NET MVC应用程序?

如果我能给出一个关于它的工作和解释的好例子,那就更好了。


当前回答

ViewModel是包含在MVC视图中使用的字段的模型。对视图使用ViewModel有以下好处:

由于数据库模型(实体类)包含单个表的数据。如果需要来自多个表的数据,一个ViewModel可以有多个表的字段。 用户不能直接与数据库模型交互,因此数据库层或模型是安全的。 它用于通过存储库从数据库模型获取数据并将其传递给视图。类似地,它利用向数据库模型发布数据来更新数据库记录。

其他回答

视图模型a是一个简单的类,它可以包含多个类属性。我们使用它来继承所有必需的属性,例如,我有两个类Student和Subject

Public class Student
{
public int Id {get; set;}
public string Name {get; set;}
}  
Public class Subject
{
public int SubjectID {get; set;}
public string SubjectName {get; set;}
}

现在我们想要在视图(MVC)中显示记录学生的名字和科目的名字,但不可能添加多个类,如:

 @model ProjectName.Model.Student  
 @model ProjectName.Model.Subject

上面的代码将抛出一个错误…

现在我们创建了一个类,可以给它起任何名字,但是这种格式“XyzViewModel”会让它更容易理解。这是继承的概念。 现在我们创建第三个类,名称如下:

public class StudentViewModel:Subject
{
public int ID {get; set;}
public string Name {get; set;}
}

现在我们在View中使用这个ViewModel

@ model ProjectName.Model.StudentViewModel

现在我们能够在View中访问StudentViewModel和继承类的所有属性。

视图模型是数据的概念模型。例如,它的用途是获取一个子集或组合来自不同表的数据。

您可能只需要特定的属性,因此这允许您只加载那些属性,而不添加不必要的属性。

视图模型通常是两个或多个模型的聚合/组合。

假设我们有一个DB,它有两个表,分别叫Student和Course,每个表有两个模型。在客户端,我们有两个视图来呈现每个表。

想象一下,您需要另一个同时呈现学生和课程的视图?然后你可以创建一个所谓的视图模型。这基本上是一个采用两种模型的类,即学生和课程。

类combinedstudentcourses将是视图模型,并可以由视图返回。

public class Student
{
    public string? Name{ get; set; }
    public string? Email{ get; set; }        
}

这是我们的视图模型,其中有两个模型。

public class Course
{
    public string? CourseName { get; set; }
    public string? CourseCode { get; set; }        
}

ViewModel,即组合两个或多个模型来满足视图的特定需求。

public class SchoolSystem
{
    public Students Student { get; set; }
    public Courses Course { get; set; }        
}
 public ActionResult<SchoolSystem> Index()
    {
      var SchoolSystemViewModel = new SchoolSystem();
        // now we have access two to tables i.e two models in our 
        //view.
      return this.View("SchoolSystemView", SchoolSystemViewModel,);
    }

视图模型是一个类,我们可以使用它在视图上呈现数据。假设您有两个实体Place和PlaceCategory,并且您希望使用一个模型访问来自这两个实体的数据,那么我们使用ViewModel。

public class Place
    {
       public int PlaceId { get; set; }
        public string PlaceName { get; set; }
        public string Latitude { get; set; }
        public string Longitude { get; set; }
        public string BestTime { get; set; }
    }
    public class Category
    {
        public int ID { get; set; }
        public int? PlaceId { get; set; }
        public string PlaceCategoryName { get; set; }
        public string PlaceCategoryType { get; set; }
    }
    public class PlaceCategoryviewModel
    {
        public string PlaceName { get; set; }
        public string BestTime { get; set; }
        public string PlaceCategoryName { get; set; }
        public string PlaceCategoryType { get; set; }
    }

在上面的例子中,Place和Category是两个不同的实体,PlaceCategory ViewModel是我们可以在View上使用的ViewModel。

我没有阅读所有的帖子,但每个答案似乎都缺少一个真正帮助我“理解”的概念……

如果一个模型类似于一个数据库表,那么一个ViewModel类似于一个数据库视图——一个视图通常要么返回来自一个表的少量数据,要么返回来自多个表(连接)的复杂数据集。

我发现自己使用ViewModels将信息传递到视图/表单中,然后在表单返回到控制器时将数据传输到有效的模型中-对于存储列表(IEnumerable)也非常方便。