【发布时间】:2012-09-05 13:01:57
【问题描述】:
我是 ASP.Net MVC 的新手。我看到人们谈论在 asp.net mvc 中使用 ViewModel,但实际上我并不清楚为什么我应该创建 ViewModel 类。
如果有人能对 ViewModel 的实际使用有所了解,并用简单的 ViewModel 代码进行解释,那就更好了。谢谢
【问题讨论】:
标签: asp.net-mvc
我是 ASP.Net MVC 的新手。我看到人们谈论在 asp.net mvc 中使用 ViewModel,但实际上我并不清楚为什么我应该创建 ViewModel 类。
如果有人能对 ViewModel 的实际使用有所了解,并用简单的 ViewModel 代码进行解释,那就更好了。谢谢
【问题讨论】:
标签: asp.net-mvc
当您的模型实体与您希望在屏幕上显示的内容不一一对应时,ViewModel 非常有用。
一个简单的例子是一个存储人们信息的应用程序。想象一下你的领域模型有一个 Person 实体和一个 address 实体。每个人都有许多地址,但只有一个默认地址。在您的一个视图中,您希望显示人员的详细信息以及他们的默认地址的详细信息。如果您想针对模型(您应该这样做)保持视图的强类型,这是不可能的,因为您不能将视图键入到 2 个实体。
这就是 viewModel 发挥最大作用的地方。您创建一个新的 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
【讨论】: