C# 获取视图上的所有ModelState错误

C# 获取视图上的所有ModelState错误,c#,html,asp.net-mvc-3,C#,Html,Asp.net Mvc 3,在我的控制器上,我添加了一些ModelState错误。 因此,在渲染视图时,我希望获得所有这些错误,并更改包含错误的字段标签的颜色 所以,我想我需要得到所有的ModelState错误,得到字段名,然后改变颜色。这是一个好方法吗 如何在视图中获取ModelState错误 您可以通过ViewData.ModelState访问它。 如果需要对视图中的错误进行更多控制,可以使用 ViewData.ModelState.IsValidField(“输入的名称”) 或者获取包含以下错误的输入列表: var

在我的控制器上,我添加了一些ModelState错误。 因此,在渲染视图时,我希望获得所有这些错误,并更改包含错误的字段标签的颜色

所以,我想我需要得到所有的ModelState错误,得到字段名,然后改变颜色。这是一个好方法吗


如何在视图中获取ModelState错误

您可以通过
ViewData.ModelState
访问它。 如果需要对视图中的错误进行更多控制,可以使用

ViewData.ModelState.IsValidField(“输入的名称”)

或者获取包含以下错误的输入列表:

var errors = ViewData.ModelState.Where(n => n.Value.Errors.Count > 0).ToList();
在我的控制器上,我添加了一些ModelState错误。所以,当我呈现我的 视图中,我希望获得所有这些错误并更改 包含错误的字段的标签

如果在ModelState中使用与视图中使用的Html.ValidationMessageFor helper完全相同的键添加模型错误,就会发生这种情况

例如,假设在表单中有以下代码段:

@Html.LabelFor(x => x.Bazinga)
@Html.EditorFor(x => x.Bazinga)
@Html.ValidationMessageFor(x => x.Bazinga)
在HttpPost控制器操作中,可以添加以下错误消息以突出显示Bazinga字段:

ModelState.AddModelError("Bazinga", "Please enter a valid value for the Bazinga field");
如果您想添加一些与特定输入字段无关的通用错误消息,您可以始终使用表单顶部的
@Html.ValidationSummary()
帮助程序来显示它。在控制器操作中:

ModelState.AddModelError(string.Empty, "Some generic error occurred. Try again.");

要显示所有错误,请尝试:

<div asp-validation-summary="All" class="text-danger"></div>

或者


@Html.ValidationSummary(false)
我的行动代码

        [HttpPost]
        public async Task<IActionResult> Register(RegisterViewModel registerViewModel)
        {
            if (ModelState.IsValid)
            {
                var user = new ApplicationUser
                {
                    FirstName = registerViewModel.FirstName,
                    LastName = registerViewModel.LastName,
                    Email = registerViewModel.Email,
                    PhoneNumber = registerViewModel.PhoneNumber,
                };
                var result = await userManager.CreateAsync(user, registerViewModel.Password);
                if (result.Succeeded)
                {
                    return RedirectToAction("Index", "Home");
                }

                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError("", error.Description);
                }
            }
            return View(registerViewModel);
        }

在asp.net mvc5中
视图中
编写此代码

<div class="col-xl-12" style="margin-top:40px;">
        @foreach (var modeleState in ViewData.ModelState.Values)
         {
            foreach (var error in modeleState.Errors)
             {
                <h5 style="color:red;margin-top:8px;">@error.ErrorMessage</h5>
             }
          }
     </div>
@Html.ValidationSummary(false, "", new { @class = "text-danger" })

美好的但我需要获取错误,而不是使用ValidationMessageFor。但这是一个很好的例子
@Html.ValidationSummary(false, "", new { @class = "text-danger" })