Niceを再生するための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です
これは、私が思うに、本当に言葉遣いの少ない質問でした。
基本的に、問題はnovalidation
属性ではありませんでした(@robastaが言ったように)。
JQuery 1.9とjQuery.Validate 1.10をうまくプレイできませんでした。 jQuery 1.83に戻すとすぐに修正され、すべて期待どおりに機能しました。
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>
また、コメントアウトされていないことも確認してください。
クイックスキャンと以前のコメントを読んだところ、data-val=true
属性は、フォーム内のアイテムのいずれかで、novalidateプロパティがjquery.validate
。
これは理にかなっています。なぜなら、これらの属性を使用している場合、検証を行うつもりのないものがあるため、novalidate属性があるからです。ただし、w3schoolsのhtml5 novalidate
プロパティを参照すると、デフォルトのnovalidate
;を上書きできます。新しい jquery.validate
スクリプトはこれを説明する必要があります。
私はそれがスキニーだと思う、誰かが同意するかどうか教えてください。
変化する
// Add novalidate tag if HTML5.
this.attr('novalidate', 'novalidate');
に
// Add novalidate tag if HTML5.
if (typeof (Worker) !== "undefined") { this.attr('novalidate', 'novalidate');