【发布时间】:2017-10-18 13:14:37
【问题描述】:
我想更新一个数据库表。控制器接收具有适当数据的视图模型。如果我像下面的示例中那样分配每个成员变量,它就可以工作
[HttpPost]
public ActionResult Edit(Admin_vm vm) {
var result = (from Users in db.Users
where Users.ID == usrID
select Users
).FirstOrDefault();
result.CompanyName = vm.ModifyUser.CompanyName;
//this is where I would assign every single member variable
db.SaveChanges();
return View(vm);
}
但是,我想知道是否有办法像这样直接分配视图模型对象:
result = vm.ModifyUser;
这不会给我一个错误,但它不会分配成员变量。有没有简单的方法可以做到这一点?
谢谢!
【问题讨论】:
-
ViewModel 用于验证用户输入。它们应该被处理、验证然后转换为实体。我还会使用 db.Users.FirstOrDefaultAsync(x=>x.Id == userID)。如果返回 null,则表示您的用户没有退出。在这种情况下,您的代码将会崩溃。
-
你的意思是我不应该将视图模型传递给控制器?对不起,我不明白你的意思。
-
您应该将虚拟机从视图传递到控制器。你不应该将它从控制器传递到数据模型:)。理论上,你的虚拟机和你的模型可能不同,所以它不会工作。希望我清楚!
-
好的,我理解你的观点。如何将我的视图模型转换为实体,然后将其传递给数据模型?这不只是创建新对象然后将其传递给数据模型的额外步骤吗?编辑:我阅读了答案,实际上我听说过 AutoMapper。但由于这是一个小项目,我想我会坚持手动分配。
标签: c# asp.net-mvc linq