Model view controller 如何使ViewModel映射到实际模型?

Model view controller 如何使ViewModel映射到实际模型?,model-view-controller,asp.net-mvc-4,Model View Controller,Asp.net Mvc 4,我的应用程序中有一个选项卡,单击该选项卡,用户的详细信息将显示在可编辑文本框中(使用占位符HTML属性)。用户可以简单地查看它们或编辑任何他想要的细节 现在我的问题是:我应该为这个场景创建一个视图模型类,还是应该使用实际的Account模型类?我想我必须创建一个视图模型类,因为我只需要Account模型类中的“某些”属性,但如果我这样做,我将如何使其“可编辑”,然后将编辑的属性(如果有)映射到实际的Account模型类 另外,如果需要创建视图模型类,请告诉我需要在哪里存储视图模型类 我应该为此场

我的应用程序中有一个选项卡,单击该选项卡,用户的详细信息将显示在可编辑文本框中(使用占位符HTML属性)。用户可以简单地查看它们或编辑任何他想要的细节

现在我的问题是:我应该为这个场景创建一个视图模型类,还是应该使用实际的Account模型类?我想我必须创建一个视图模型类,因为我只需要Account模型类中的“某些”属性,但如果我这样做,我将如何使其“可编辑”,然后将编辑的属性(如果有)映射到实际的Account模型类

另外,如果需要创建视图模型类,请告诉我需要在哪里存储视图模型类

我应该为此场景创建一个视图模型类,还是应该使用 实际帐户模型类

是的,最好创建一个模型来表示您需要的操作,这样做可以防止过少和过重的发布。因此,您可以在期望用户使用的属性上进行操作。例如,如果您有一个具有许多属性的
AccountModel
,您只需要在
add
操作中处理其中的十个属性,在
edit
操作中处理其中的五个属性,那么您就可以创建两个ViewModel:

// your model or entity
public class AccountModel {
    // the list of properties goes here
}
// your view models
public class CreateAccountModel {
    public string Username {get;set;}    
    public string Password {get;set;}
    public string Phone {get;set;}
}
// this model is for the scenario 
// where you want users to edit their basic info
// but not the password (e.g. you have a separate
// functionality for changing the password)
public class EditAccountModel {
    public string Username {get;set;}    
    public string Phone {get;set;}
}
现在,要将viewmodels映射到实际的模型或实体,您可以使用映射器工具或自己进行映射(虽然很累,但对于小模型来说是一个选项)。以下是步骤:

  • 您从post接收模型/实体
  • 您可以从数据库中查询实体
  • 将值从viewmodel复制到模型/图元
  • 将模型/实体保存回数据库
我到底需要在哪里存储视图模型类


您可以将它放在MVC项目中创建的
Models
文件夹下。这实际上更像是一种偏好,没有标准的方法来实现它——特别是当您开始分层应用程序时。把它放在更有意义的地方。

非常感谢您如此详细和及时的回复!关于mapper工具的使用(因为我是一个新手,从未使用过),我有一个问题:假设我的视图模型有5个属性,而实际模型有10个属性,那么映射工具将如何解决这个问题?该工具是否会自动跳过不属于视图模型的属性?不客气。是的,它将跳过它。