如果我有通常的“编辑”操作,则 GET 操作可以通过对象的 ID 检索对象并将其显示在编辑表单中。接下来 POST 获取 ViewModel 中的值并更新数据库中的对象。
public virtual ActionResult Edit(int id)
[HttpPost]
public ActionResult Edit(VehicleVariantEditSaveViewModel viewModel)
如果在 POST 操作中的模型绑定期间发生错误,我知道我可以将 RedirectToAction 返回到 GET 操作,并通过将 ModelState 验证错误复制到 TempData 并在 GET 操作中重定向后检索它来保留 ModelState 验证错误。
if (TempData["ViewData"] != null)
{
ViewData = (ViewDataDictionary)TempData["ViewData"];
}
然后,如何将包含先前无效 ModelState 的 ViewData 转换为新模型以发送到视图,以便用户看到带有验证警告的无效输入?奇怪的是,如果我将从数据库检索到的 ViewModel 的新实例(带有原始有效数据)传递给 View() ,则会忽略该实例并显示 ViewData 中的(无效)数据!
Thanks
我遇到了类似的问题,并决定使用以下模式:
public ActionResult PersonalRecord(Guid id)
{
if (TempData["Model"] == null)
{
var personalRecord = _context.PersonalRecords.Single(p => p.UserId == id);
var model = personalRecord.ToPersonalRecordModel();
return View(model);
}
else
{
ViewData = (ViewDataDictionary) TempData["ViewData"];
return View(TempData["Model"]);
}
}
[HttpPost]
public ActionResult PersonalRecord(PersonalRecordModel model)
{
try
{
if (ModelState.IsValid)
{
var personalRecord = _context.PersonalRecords.Single(u => u.UserId == model.UserId);
personalRecord.Email = model.Email;
personalRecord.DOB = model.DOB;
personalRecord.PrimaryPhone = model.PrimaryPhone;
_context.Update(personalRecord);
_context.SaveChanges();
return RedirectToAction("PersonalRecord");
}
}
catch (DbEntityValidationException ex)
{
var errors = ex.EntityValidationErrors.First();
foreach (var propertyError in errors.ValidationErrors)
{
ModelState.AddModelError(propertyError.PropertyName, propertyError.ErrorMessage);
}
}
TempData["Model"] = model;
TempData["ViewData"] = ViewData;
return RedirectToAction("PersonalRecord", new { id = model.UserId });
}
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)