17

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

所以,我认为我需要获取所有 ModelState 错误,获取字段名称,然后更改颜色。这是好方法吗?

如何在我的视图中获取 ModelState 错误?

4

4 回答 4

31

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

ViewData.ModelState.IsValidField("name_of_input")

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

var errors = ViewData.ModelState.Where(n => n.Value.Errors.Count > 0).ToList();
于 2013-07-10T21:13:35.683 回答
13

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

如果您在 ModelState 中使用与您在视图中使用的 Html.ValidationMessageFor 帮助器完全相同的键添加模型错误,这正是会发生的事情。

因此,例如让我们假设在您的表单中,您有以下代码段:

@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.");
于 2013-07-10T21:15:25.927 回答
2

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

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

或者,

<div class="text-danger">
    @Html.ValidationSummary(false)
</div>
于 2019-08-30T19:05:49.187 回答
1

我的动作代码

        [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 coreView写下这段代码

<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>

asp.net mvc5View写下这段代码

@Html.ValidationSummary(false, "", new { @class = "text-danger" })
于 2021-01-05T11:47:18.493 回答