Почему дается атрибут NoValidate?
возникли проблемы с получением jQuery Validate plugin, чтобы играть хорошо.
модель
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, который предотвращает утверждение. Так что да, это то, что вызывает это, я предполагаю.
вопрос в том-почему bejesus добавляется в форму? Я не просил об этом!
edit: сделал немного копания на основе ответа @rob, кажется, jQuery validate бросает исключение, следовательно, обратную передачу..

это jquery.проверить 1.10
4 ответов
на novalidate атрибут добавляется jquery.проверить строку 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>
также убедитесь, что они не закомментированы.
Это был действительно плохо сформулированный вопрос с моей стороны, я думаю.
по существу проблема не была на всех (как @робаста сказал).
Я не мог получить jQuery 1.9 и jQuery.Проверьте 1.10, чтобы играть красиво. Переход на jQuery 1.83 исправил это сразу, все работает так, как я ожидал.
от быстрого сканирования и чтения предыдущих комментариев, я замечаю, что если у вас есть data-val=true атрибут на любом из элементов в форме свойство novalidate будет автоматически вставлено с помощью jquery.validate.
это имеет смысл, потому что если вы используете эти атрибуты, то есть то, что вы не собираетесь проходить проверку, следовательно, атрибут novalidate; однако, прочитав на html5 novalidate свойство на w3schools, вы можете перезаписать по умолчанию novalidate новое jquery.validate скрипт должен учитывать это.
Я думаю, что это тощий, дайте мне знать, если кто-нибудь согласится.
изменить
// Add novalidate tag if HTML5.
this.attr('novalidate', 'novalidate');
to
// Add novalidate tag if HTML5.
if (typeof (Worker) !== "undefined") { this.attr('novalidate', 'novalidate');