【问题标题】:How to remove list from validation summary如何从验证摘要中删除列表
【发布时间】:2011-11-14 21:58:46
【问题描述】:

我为我的 View Model 类添加了 ValidationSummary Html 帮助程序,该类有 5 个必填字段。它的工作原理是漂亮的红色单词缺少 1、缺少 2 等。 但我只需要显示一条消息而不是其中的五条(例如:“您的输入无效。”)。这可以通过 ValidationSummary 完成吗?

【问题讨论】:

    标签: asp.net-mvc validation


    【解决方案1】:

    我在 MVC3 中使用的一种蛮力方法:

    if (!ModelState.IsValid)
    {
        ModelState.AddModelError("", "Some contextual error message");
    }
    

    并将其显示在您的页面上:

    <% if(!ViewData.ModelState.IsValid) { %>
        <span class="error"><%=ViewData.ModelState[String.Empty].Errors[0].ErrorMessage %> </span>
    <% } %>
    

    【讨论】:

      【解决方案2】:

      如果您查看 MVC3 源代码,您会发现,目前,如果您在使用 excludePropertyErrors=trueUnobtrusiveJavaScriptEnabled 的同时使用 ValidationSummary,则不会呈现任何验证摘要。

      我能够在启用 UnobtrusiveJavascript 的 MVC3 中仅显示一条消息,用于客户端验证。根本不要使用@Html.ValidationSummary,然后渲染:

      @{
          //Show the message when there are server side errors
          ViewBag.ValidationSummaryClass = ViewData.ModelState.IsValid ? "validation-summary-valid" : "validation-summary-errors";
      }
      <div class="@ViewBag.ValidationSummaryClass" data-valmsg-summary="true">
          <span>Before you can continue, please make sure you have completed the mandatory fields highlighted above.</span>
          <ul style="display:none"/>
      </div>
      

      注意display:none,不显眼的 javascript 仍然会用错误消息填充列表,但它们会被隐藏。

      【讨论】:

        【解决方案3】:

        如果您只想在 ModelState 无效时显示一条消息,则可以尝试跳过帮助程序。只需检查ViewData 中的ModelState 即可。

        @if (!ViewData.ModelState.IsValid)
        {
            <p>Your input is not valid.</p>
        }
        

        【讨论】:

          【解决方案4】:

          你有两个选择(至少):

          要么使用验证摘要,要么排除属性错误:

          @Html.ValidationSummary(true, "The input is not valid")
          

          或将错误消息与您的操作中的自定义键相关联:

          if (!ModelState.IsValid)
          {
              ModelState.AddModelError("myerrorsummary", "The input is not valid");
          }
          

          并将其显示在您的页面上:

          @Html.ValidationMessage("myerrorsummary")
          

          【讨论】:

          • 第一个解决方案似乎最好,因为它应该在客户端工作,但它只在不使用 UnobtrusiveJavaScript 时才有效!
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-26
          相关资源
          最近更新 更多