glo*_*rob 31 asp.net-mvc html5 jquery-validate
无法获得jQuery Validate插件来玩得很好.
模型
public class FooVM
{
[Required]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
布局
<!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>
Run Code Online (Sandbox Code Playgroud)
视图
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>
}
Run Code Online (Sandbox Code Playgroud)
当我提交时,会短暂显示错误消息,然后表单仍然会回发.
我注意到的一件我以前没见过的事情是标记包含'novalidate'属性
<form action="/bar/add" class="form-horizontal" method="post" novalidate="novalidate">
Run Code Online (Sandbox Code Playgroud)
从我读过的内容来看,这是阻止验证的HTML5属性.所以,是的,这就是我假设的原因.
问题是 - 为什么bejesus被添加到表单中?我没有要求它!
编辑:根据@rob的答案进行了一些挖掘,似乎jquery validate抛出异常,因此回发..
这是jquery.validate 1.10
rob*_*sta 31
该novalidate
属性由jquery.validate第32行添加:
// Add novalidate tag if HTML5.
this.attr('novalidate', 'novalidate');
Run Code Online (Sandbox Code Playgroud)
如果您使用的是HTML5,请删除该属性:
$("#contactForm").validate();
$("#contactForm").removeAttr("novalidate");
Run Code Online (Sandbox Code Playgroud)
在你的web.config
,请确保你有:
<appSettings>
...
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
Run Code Online (Sandbox Code Playgroud)
还要确保它们没有被注释掉.
我认为这对我来说真的是一个措辞不好的问题.
基本上问题根本不是novalidation
属性(正如@robasta所说).
我无法让jQuery 1.9和jQuery.Validate 1.10很好地发挥.切换回jQuery 1.83直接修复它,所有工作正如我所期望的那样.
小智 6
通过快速扫描和阅读之前的评论,我注意到,如果data-val=true
表单中的任何项目具有该属性,则 novalidate 属性将自动插入jquery.validate
。
这是有道理的,因为如果您正在使用这些属性,那么有些东西您不打算经过验证,因此 novalidate 属性;但是,通过阅读novalidate
w3schools 上的 html5 属性,您可以覆盖默认值novalidate
;新jquery.validate
脚本必须考虑到这一点。
我认为这就是瘦,如果有人同意请告诉我。
归档时间: |
|
查看次数: |
54172 次 |
最近记录: |