可能重复:
ASP.NET MVC ViewModel 模式
我是 ASP.Net MVC 的新手。我看到人们在 asp.net mvc 中谈论 ViewModel 的使用,但实际上我并不清楚为什么我应该创建 ViewModel 类。
如果有人对 ViewModel 的实际使用有所了解,并用简单的 ViewModel 代码进行解释,那就更好了。谢谢
可能重复:
ASP.NET MVC ViewModel 模式
我是 ASP.Net MVC 的新手。我看到人们在 asp.net mvc 中谈论 ViewModel 的使用,但实际上我并不清楚为什么我应该创建 ViewModel 类。
如果有人对 ViewModel 的实际使用有所了解,并用简单的 ViewModel 代码进行解释,那就更好了。谢谢
当您的模型实体与您想要在屏幕上显示的内容不一一对应时,ViewModel 非常有用。
一个简单的示例是存储有关人员信息的应用程序。想象一下你的领域模型有一个 Person 实体和一个 address 实体。每个人都有许多地址,但只有一个默认地址。在您的一个视图中,您希望显示人员的详细信息以及他们的默认地址的详细信息。如果您想让您的视图针对模型(您应该这样做)进行强类型化,那将是不可能的,因为您不能将视图键入到 2 个实体。
这就是 viewModel 发挥最大作用的地方。您创建一个新的视图模型类,该类具有 2 个属性,一个是 person 类型,一个是 address 类型,在您的控制器中,您用所需的信息填充这些属性,然后针对这个 Person+address 模型类键入您的视图。
至于它们的代码,它们就像任何其他模型一样。一个例子很快就会出现。
域模型(可能在您的数据访问层中找到,或者在单独的域模型项目中找到):
public class Person{
public int PersonId{get;set;}
public string Name {get;set;}
.
.
.
}
public class Address{
public int AddressId{get;set;}
public string Street1 {get;set;}
public string Street2 {get;set;}
.
.
}
然后你可以有一个像这样的 viewModel 类:
public class MyViewModel{
public Person ThePerson{get;set;}
public Address TheAddress{get;set;]}
}
甚至
public class MyViewModel : Person{
public Address TheAddress{get;set;]}
}
但我更喜欢第一种解决方案,而同事经常选择第二种解决方案。然后,您的视图将针对 MyViewModel 进行强类型化,并通过以下语法访问视图中的值:@model.Person.PersonId