我试图弄清楚为什么我的视图在提交表单并返回相关的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/

10-17 00:05