【问题标题】:Passing ModelState to RedirectToAction into a ViewModel将 ModelState 传递给 RedirectToAction 到 ViewModel
【发布时间】:2014-03-23 06:52:16
【问题描述】:

如何回传使用DbEntityValidationException时发现的验证错误

            try
            {
                db.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {
                foreach (var validationErrors in dbEx.EntityValidationErrors)
                {
                    foreach (var validationError in validationErrors.ValidationErrors)
                    {
                        this.ModelState.AddModelError(validationError.PropertyName, 
                        validationError.ErrorMessage);
                    }
                }
                return RedirectToAction("AccessDetail", "Home", new { IDValue = access.ID });
            }

似乎当我这样做时RedirectToAction 我的ModelState 刷新并且我无法查看它发现的错误。

AccessDetail 填充了一个视图模型,其中包含许多不同的数据源。因此,仅将 访问权限 传递给 View 是行不通的。

我正在查看这个 question,但它不符合我的需求,因为我的视图填充了 ViewModel

【问题讨论】:

    标签: c# asp.net-mvc entity-framework


    【解决方案1】:

    RedirectToAction 辅助方法向客户端发出 302 响应,这使客户端向新 url 发出新的 GET 请求。

    如果您想在这两个请求之间保留一些数据,请使用TempData

    TempData["Errors"] = yourListOfErrors;
    return RedirectToAction("AccessDetail", "Home", new { IDValue = access.ID });
    

    在您的 GET 操作中,读取 TempData 值并显示它。

    但如果您不想执行 RedirecToAction,您可以简单地将视图模型返回到视图,如果您有 ValidationSummary 辅助方法,它将显示验证错误消息。

    简单地使用

    return View(model);
    

    【讨论】:

    • 我尝试重新填充我的 ViewModel,但没有为@Html.ValidationMessageFor(m => m.DataManagementTeacher.TeacherAttr.LeaveNotes) 显示验证消息
    猜你喜欢
    • 2014-04-05
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多