【问题标题】:Get all ModelState Errors on view获取视图中的所有 ModelState 错误
【发布时间】:2013-07-10 21:10:17
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# html asp.net-mvc-3


    【解决方案1】:

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

    ViewData.ModelState.IsValidField("name_of_input")

    或获取错误的输入列表,如下所示:

    var errors = ViewData.ModelState.Where(n => n.Value.Errors.Count > 0).ToList();
    
    【解决方案2】:

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

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

    例如,假设您的表单中有以下 sn-p:

    @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.");
    

    【讨论】:

    • 不错!但我需要获取错误,而不是使用 ValidationMessageFor。但是这是一个很好的例子
    【解决方案3】:

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

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

    或者,

    <div class="text-danger">
        @Html.ValidationSummary(false)
    </div>
    

    【讨论】:

      【解决方案4】:

      我的操作代码

              [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 核心中 在View写下这段代码

      <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 mvc5 中 在View写下这段代码

      @Html.ValidationSummary(false, "", new { @class = "text-danger" })
      

      【讨论】:

        猜你喜欢
        • 2010-11-24
        • 2020-11-19
        • 2020-03-10
        • 1970-01-01
        • 1970-01-01
        • 2020-01-25
        • 1970-01-01
        • 2011-03-09
        • 2012-07-12
        相关资源
        最近更新 更多