我试图弄清楚为什么我的视图在提交表单并返回相关的ViewModel并设置ModelState.AddModelError(“”,“ error”)后为什么不将数据恢复到原始状态;
当请求我的“编辑”页面时,我调用一个方法来构建我的视图模型并将其传递给我的视图,并且一切都会按预期显示:
public ActionResult Edit(string id, string returnUrl)
{
if (ReferenceEquals(id, null))
return HttpNotFound();
var vm = GetOrganzationEditViewModel(id, returnUrl);
return View(vm);
}
当我对视图中的可用字段进行一些更改并提交后,我将执行一些服务器端验证,如果它无法通过特定条件之一,我将通过调用相同的方法(即
GetOrganzationEditViewModel
与请求页面时使用的参数相同,因为这些参数包含在ViewModel中,并且我还使用ModelState.AddModelError
返回相关错误。if ((organizationModelFromDb.MembershipType == MembershipType.Full)
{
ModelState.AddModelError("", $"Test Error:");
return View("Edit",GetOrganzationEditViewModel(organizationEditViewModel.
Organization.OrganizationId, organizationEditViewModel.ReturnUrl));
}
它确实在我的
ValidationSummary
中显示了预期的错误,但给我的印象是,通过返回ViewModel,它将用返回的ViewModel的值重新填充我的值,但是实际上保留了我编辑它们时的值。我的Razor页面包含绑定到ViewModel的字段,看起来很标准:
<div class="form-group">
@Html.LabelFor(model => model.Organization.Website, htmlAttributes: new { @class =
"control-label col-md-3"})
<div class="col-md-5">
@Html.EditorFor(model => model.Organization.Website, new
{htmlAttributes = new { @class = "form-control", id = "txtWebsite" } })
@Html.ValidationMessageFor(model => model.Organization.Website, "", new { @class =
"text-danger" })
</div>
</div>
我是否缺少某些东西,或者我想以不同的方式处理?
谢谢
最佳答案
我阅读了您的上述问题,根据我的理解,由于以下原因,您可能会遇到该还原问题。
可能会再次初始化通过edit post方法作为参数的viewmodel变量,或者在将其发送到视图之前,该变量的名称可能已更改。
由于我无法完全看到edit post方法,因此我无法想到任何其他原因。
您可以做的更多事情是调试,方法是在控制器的动作方法中设置断点,以找出丢失数据的确切位置。
希望以上信息对指导您有所帮助,请让我知道您的想法或反馈
谢谢
卡尔提克
关于c# - 返回viewmodel以查看验证错误asp.net MVC 5时未还原数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44192280/