我想知道最好的做法是对viewmodels的控制器进行更新,并在下面提供几个问题.这是我迄今为止的理解(可能是错误的)..
>我们创建模型.
通过创建一个新的类和声明属性,使用与基本模型类相同的名称和类型(包括要更新的基本模型的ID字段..),并且类不以任何方式链接,从而创建viewmodels.
>为每个基本模型创建一个存储库(以查找和保存数据等).
>为每个viewmodel创建一个Controller操作(访问基类的库以检索值,并将这些值放入viewmodel中,然后将viewmodel传递给viewmodels View).
>从viewmodels创建视图(viewmodel视图)
>在viewmodel控件Update(POST)方法中,接收更新的viewmodel对象并将其转换为基本模型对象(可能使用Automapper?),然后使用它们的存储库保存基本模型对象并应用这样的绑定? “TryUpdate<'IPerson>(person)”,“TryUpdate<'IPlace>(place);” (这看起来错了,目的是将值从viewmodel重新放入基类,应用绑定,使用存储库保存基本模型!..这似乎不使用存储库.而不是TryUpdate<'IPerson> (人);我会期待看到这样的东西:person.Save(IPerson)..“person包含值”,“.Save是存储库”,“IPerson包含用于绑定的绑定属性”? ..不知道这是否正确..
到目前为止,我已经通过创建一个新类并使用相同的名称从不同的基本模型添加属性来创建了viewmodel.在这一点上,我有以下问题:
Q1:每个viewmodel都有自己的控制器,并访问每个基本模型存储库类以获取其值?
Q2:在viewmodel中,应该包括您正在使用属性的所有基本模型的ID字段,考虑到您可能需要通过viewmodels控制器将Update Update更新回到Base Models存储库(需要ID值)?
Q3:如何使用接口绑定属性,以便使用存储库保存控制器中的模型.
我一直无法找到一个解释一切的教程或资源,一个完整的答案将是以下示例:
> 2x简单模型,1x简单视图模型,1x接口用于绑定,1x简单控制器,使用接口类绑定更新,1x存储库,即
//型号1
public class Person { int PersonID {get;set;} string FirstName {get;set;} string LastName {get;set;} DateTime DOB {get;set} }
//模型2
public class Place { int PlaceID {get;set;} string Description {get;set;} string AreaType {get;set;} string PostCode {get;set;} }
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? }
解决方法
首先要做一些一般规则:
>不要使用TryUpdateModel.只是不要
>由于同样的原因,请勿使用任何“自动”映射映射器将您的视图模型映射到您的实体.自动映射相反(从实体到查看模型)是好的.
您不需要使用接口.
视图模型应该是非常简单的类,只包含您需要的视图信息.如果您的视图与其显示的POST信息不同,则只需为POST创建不同的视图模型.
我们为我们的视图模型使用{Controller} {Action}模型的命名约定.所以对于一个名为“List”的操作,在“Post”控制器上,我们将有一个名为“PostListModel”的模型.
最后,在这里查看我的回应Real example of TryUpdateModel,ASP .NET MVC 3