【问题标题】:Html.ValidationSummary(false, "message") is always showing, even on page loadHtml.ValidationSummary(false, "message") 总是显示,即使在页面加载时
【发布时间】:2011-05-09 04:41:33
【问题描述】:

我正在使用客户端验证,我希望下面的消息仅在出现错误时显示。如果任何字段无效,我会尝试将此作为一般错误。
目前

"* 表示必填字段"

在验证之前总是显示。

<%: Html.ValidationSummary(false, "* denotes required field.")%>

我正在使用模型绑定在客户端和 MVC 上执行验证。

【问题讨论】:

    标签: asp.net-mvc validation validationsummary


    【解决方案1】:

    如果您在浏览器中使用开发人员工具检查验证摘要文本,您会发现它具有类 validation-summary-<b>valid</b>(当它是清晰的时),而当存在表单错误时是 validation-summary-<b>errors</b>

    因此,只需创建一个css规则如下;

    .validation-summary-valid {
        display:none;
    }
    

    一切都应该很好。

    【讨论】:

    • 为什么这不在默认样式表中?
    • 为什么框架需要一条消息来总结有效和无效模型?
    • 好吧,如果启用了客户端验证,他们就不能像在服务器端那样从页面中删除 div,因为 js 需要能够显示和隐藏它。他们本可以使用 display:none 来隐藏它,但是他们使用了一个类,可以让您更好地控制样式(代价是让您设置样式表规则)。
    • 感谢您解释问题。出于某种原因,除非我将它嵌入到页面中,而不是我的站点范围的 CSS 文件,否则此 CSS 将无法在移动设备上运行。我没有这样做,而是将 Html.ValidationSummary 调用包装在条件中。我先检查 ViewData.ModelState.IsValid。
    【解决方案2】:

    我认为问题在于 Html.ValidationSummary 必须出现在 Html.BeginForm 否则总是显示消息。

    【讨论】:

    • 但是如果你这样做,你会失去客户端检查。
    • 将 Html.ValidationSummary 移到 Html.BeginForm 上方使其完全停止出现(MVC 4 / Razor)。
    • 同意 - 只有当 ClientValidationEnabled 为 true 时才会出现摘要一直显示的问题。此解决方案实际上与通过中断客户端验证将其设置为 false 相同。
    • 如前所述,这只会反过来破坏它。
    【解决方案3】:

    最初我在页面加载时检查 List 属性,所以我 想通过一个新模型。然后验证摘要刚刚出现。 当我从

    更改我的代码时
    return View(new myModel)
    

    return View()
    

    验证摘要未出现在 Get 上。我还在检查属性时对模型添加了一个空检查,以便我可以使用后面的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-12
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多