【问题标题】:Get all non-model errors from asp-validation-summary从 asp-validation-summary 获取所有非模型错误
【发布时间】:2018-08-10 12:46:53
【问题描述】:

据我所知,asp-validation-summary 可能是以下之一:

  • 仅模型
  • 全部

我想知道是否有任何可能的方法或技巧来获取所有 NonModel 错误,或者换句话说,所有通过 ModelState.AddModelError("custom", "some error who doesn't come from ValidationAttribute in the Model" );

【问题讨论】:

    标签: validation razor asp.net-core


    【解决方案1】:

    不,因为两者之间没有任何有意义的区别。 ModelState 是可枚举字符串的字典。没有关于该值中的特定键或值或项目来自何处的信息。

    “模型”错误只是添加到空字符串键的错误,而“非模型”错误是其他任何错误。这就是你所拥有的。

    【讨论】:

      【解决方案2】:

      面临同样的问题。 我想在 Bootstrap 警报中就地显示字段错误和服务器端错误。 为了区分显式添加的错误,我将它们添加为前缀(在我的例子中是“#”):

      ModelState.AddModelError("#SomeError", "Some error occured");
      

      然后可以通过这种方式在视图/页面中过滤这些错误:

          var explicitlyAddedErrors = Model
              .Where(_ => _.Key.StartsWith("#"))
              .SelectMany(_ => _.Value.Errors)
              .ToList();
      

      希望这对某人有用。 :)

      【讨论】:

        【解决方案3】:

        您可以将以下行添加到您通常放置 asp-validation-summary 的位置

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

        第一个参数决定是否排除Property Errors。因为我已经有了 asp-validation-for = "PROPERTY",所以我把我的保留为 true;多次显示相同的错误消息是没有意义的。

        第二个参数是显示错误信息的标题。例如:

        @Html.ValidationSummary(true, "Errors", new { @class = "text-danger" })
        
        Errors
         * Invalid Login
        

        “错误”仅在至少有一个错误时才会显示。

        最后一个参数是不言自明的。

        希望这会有所帮助! :)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-03-08
          • 2018-11-01
          • 1970-01-01
          • 2020-11-19
          • 1970-01-01
          • 2019-10-04
          • 2016-11-28
          • 2014-12-18
          相关资源
          最近更新 更多