我是ASP.NET MVC 3.0的新手,并尝试使用MVC ViewModel设计构建应用程序。
我想知道为ViewModel重新调整控制器的最佳做法是什么,并在下面提出几个问题。这是我目前的理解(可能是错误的)..
到目前为止,我已经通过创建一个新类并使用相同的名称从不同的基本模型添加属性来创建ViewModel。此时我有以下问题:
Q1:每个ViewModel是否都有自己的控制器并访问每个基本模型存储库类以获取其值?
Q2:在ViewModel中,您应该包含您使用属性的所有基本模型的ID字段,考虑到您可能希望通过ViewModels Controller将Update更新回基础模型库(需要ID)值)?
问题3:如何使用接口绑定属性,以使用存储库来保存控制器中的模型。
我无法找到一步一步解释所有内容的教程或资源,完整的答案将是以下示例:
//型号1
public class Person
{
int PersonID {get;set;}
string FirstName {get;set;}
string LastName {get;set;}
DateTime DOB {get;set}
}
// Model2的
public class Place
{
int PlaceID {get;set;}
string Description {get;set;}
string AreaType {get;set;}
string PostCode {get;set;}
}
// ViewModel(包含模型中的属性)
publc class ViewModel
{
//Person attributes
int PersonID {get;set;}
string FirstName {get;set;}
string LastName {get;set;}
//Place attributes
int PlaceID {get;set;}
string Description {get;set;}
string AreaType {get;set;}
//other attributes
string someOtherAttributeForDisplay {get;set}
}
// Model1接口(用于绑定模型)
public interface IPerson
{
string FirstName {get;set;}
}
// Model2接口(用于绑定模型)
public interface IPlace
{
string Description {get;set;}
string AreaType {get;set}
}
// ViewModelController?
{
//What goes here?
}
//存储库?
{
//what goes here?
}
答案 0 :(得分:6)
我认为你可能过于复杂化了一个非常简单的概念。
首先是一些一般规则:
您不必使用接口。
视图模型应该是非常简单的类,它们只包含视图所需的信息。如果您的视图从显示的内容中发布不同的信息,则只需为POST创建不同的视图模型。
我们为视图模型使用{Controller} {Action} Model的命名约定。因此,对于“Post”控制器上名为“List”的动作,我们将有一个名为“PostListModel”的模型。
最后,请在此处查看我的回复Real example of TryUpdateModel, ASP .NET MVC 3