我的桌子有大约100个不同的字段。我有一个MVC视图来对特定实例进行编辑和更改。 100个领域中的一些将改变,其中一些不会改变。有没有办法在不手动输入每个字段的情况下进行这些更改?这是我到目前为止的代码
if (!ModelState.IsValid)
{
var errors = ModelState.SelectMany(x => x.Value.Errors.Select(z => z.Exception));
ViewBag.Error = errors;
return View("~/Views/errorE.cshtml");
}
try
{
Phone selectedItem = (from x in DB.Phones
where x.PhoneID == ID
select x).Single();
//UPDATE MODEL//
DB.SubmitChanges();
ViewBag.Status = "Update Succesfull.";
TempData["Toastr"] = "Success";
return View("~/Views/PhoneCatalog/edit.cshtml", _PhoneCatalog);
}
catch (Exception e)
{
ViewBag.Error = e.Message;
return View("~/Views/errorE.cshtml");
}
答案 0 :(得分:1)
是的,您可以使用TryUpdateModel()
让模型绑定器自动使用匹配名称的已发布表单字段更新您的实体对象。
您应添加的行是:
//UPDATE MODEL
TryUpdateModel(selectedItem);
请注意安全隐患,并确保您没有创建Mass Assignment Vulnerability。
答案 1 :(得分:0)
像Automapper这样的外部图书馆很受欢迎,否则就会出现一个“穷人”#34;是使用dbContext对象中的方法SetValues
。
DB.Entry(copyToObject).CurrentValues.SetValues(copyFromObject);
这将复制属性名称彼此匹配的任何属性,因此它意味着与DTO一起使用。