33

无法让 jQuery Validate 插件正常运行。

模型

public class FooVM
{
    [Required]
    public string Name { get; set; }
}

布局

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <script src="@Url.Content("~/scripts/jquery-1.9.0.min.js")" type="text/javascript"></script>
        <script src="@Url.Content("~/scripts/jquery-migrate-1.0.0.min.js")" type="text/javascript"></script>
        <script src="@Url.Content("~/scripts/jquery.validate.min.js")" type="text/javascript"></script>
        <script src="@Url.Content("~/scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
        <script src="@Url.Content("~/scripts/bootstrap.min.js")" type="text/javascript"></script>
        <link href="@Url.Content("~/content/bootstrap-responsive.min.css")" rel="stylesheet" type="text/css" />
        <link href="@Url.Content("~/content/bootstrap.min.css")" rel="stylesheet" type="text/css" />
        <title>@ViewBag.Title</title>
    </head>
    <body>
    <div class="container">
        <div class="row">
            <div class="span12">
                <div class="navbar">
                    <div class="navbar-inner">
                        <a class="brand" href="#">idoneit</a>
                        <ul class="nav">
                            <li class="menu-link">@Html.ActionLink("Home", "index", "bar")</li>
                        </ul>
                    </div>
                </div>
            </div>
            <div class="span12 error-container">

            </div>
            <div class="span12 main-body">
                @RenderBody()
            </div>
        </div>
    </div>
    </body>
</html>

看法

model bootstrapvalidate.Models.FooVM
@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

@using (Html.BeginForm("add", "bar", FormMethod.Post, new { @class = "form-horizontal" }))
{
    <fieldset>
        @Html.ValidationSummary()
        <legend>Testing Bootstrap & Validate</legend>
        <div class="control-group">
            <label for="Name" class="control-label">Name</label>
            <div class="controls">
              @Html.TextBoxFor(x => x.Name) 
            </div>
            <button type="submit" class="btn">Add!</button>
        </div>
    </fieldset>
}

当我提交时,错误消息会短暂显示,然后表单无论如何都会发回。

我注意到的一件事是我以前没有见过的标记包含“novalidate”属性

<form action="/bar/add" class="form-horizontal" method="post" novalidate="novalidate">    

从我读过的位来看,这是阻止验证的 HTML5 属性。所以,是的,这就是我认为的原因。

问题是 - 为什么将它添加到表单中?我没有求过!

编辑:根据@rob 的回答进行了一些挖掘,似乎 jquery validate 抛出异常,因此回发..

调试结果

这是 jquery.validate 1.10

4

5 回答 5

32

novalidate属性由 jquery.validate 第 32 行添加:

// Add novalidate tag if HTML5.
this.attr('novalidate', 'novalidate');

如果您使用的是 HTML5,请删除该属性

$("#contactForm").validate();
$("#contactForm").removeAttr("novalidate");

在您的web.config中,确保您有:

 <appSettings>        
    ...
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>

还要确保它们没有被注释掉。

于 2013-01-21T12:17:12.430 回答
6

我认为这确实是一个措辞不佳的问题。

本质上,问题根本不是novalidation属性(正如@robasta 所说)。

我无法让 jQuery 1.9 和 jQuery.Validate 1.10 玩得很好。切换回 jQuery 1.83 立即修复它,一切都按我的预期工作。

于 2013-01-21T14:01:21.393 回答
4

通过快速浏览并阅读之前的评论,我注意到如果您data-val=true在表单中的任何项目上都有该属性,则 novalidate 属性将自动插入jquery.validate.

这是有道理的,因为如果您使用这些属性,那么您不打算通过验证,因此 novalidate 属性;但是,通过阅读 w3schools 上的 html5novalidate属性,您可以覆盖默认值novalidate;新jquery.validate脚本必须考虑到这一点。

我认为这是瘦身,如果有人同意,请告诉我。

于 2013-05-19T04:47:42.170 回答
1

改变

// Add novalidate tag if HTML5.
this.attr('novalidate', 'novalidate');

// Add novalidate tag if HTML5.
    if (typeof (Worker) !== "undefined") { this.attr('novalidate', 'novalidate'); 
于 2013-06-29T10:25:08.727 回答
-2

对于默认的 jquery 表单验证,在 Html.BeginForm @novalidate="" 中添加此属性

于 2021-03-23T08:03:12.060 回答