検証が失敗した場合5テンプレートプロジェクトの使用。ASP.NET MVCで防ぐ方法jqueryのAJAX提出し、私は私のASP.NET MVCは、標準jquery.validate.jsそのデフォルトASP.NETで使用しています<code>ASP.NET 5 MVC RC1</code></p> <p>jQueryの検証プラグインを使用しています
/*!
* jQuery Validation Plugin v1.14.0
*
* http://jqueryvalidation.org/
*
* Copyright (c) 2015 Jörn Zaefferer
* Released under the MIT license
*/
とjquery.validation.unobtrusive.js
/*!
** Unobtrusive validation support library for jQuery and jQuery Validate
** Copyright (C) Microsoft Corporation. All rights reserved.
*/
私は私の問題を示すために、以下の簡単な必須フィールドの例を提供します。
のViewModel:
public class TierImportStatusUpdateViewModel
{
[Required]
public string String1 { get; set; }
[Required]
public string String2 { get; set; }
//more fields
}
CSHTML:
@model MyViewModel
<form action="/controller/action" data-ajax="true" data-ajax-method="POST" data-ajax-mode="replace" data-ajax-update="#dic1" id="form1" method="post" class="allforms">
@Html.LabelFor(model=>model.String1)
@Html.EditorFor(model=>model.String1)
@Html.ValidationMessageFor(model=>model.String1)
<br>
@Html.LabelFor(model=>model.String2)
@Html.EditorFor(model=>model.String2)
@Html.ValidationMessageFor(model=>model.String2)
<br>
<button type="submit" class="btn btn-primary" id="submit" name="submit">submit</button>
</form>
上記の検証が正常に動作します。 String1
がフォームにキャプチャされていない場合、POST
メソッドは呼び出されず、クライアント側でエラーメッセージが表示されます。
私は、すべてのフォームが提出キャッチし、いくつかの追加のロジックを実行するために好きな私は、次のjQueryを使用します。このjqueryの機能が動作
$(".allforms").submit(function (e) {
e.preventDefault();
var self = this;
$.ajax({
processData: false,
contentType: false,
data: new FormData(this),
type: $(this).attr('method'),
url: $(this).attr('action'),
success: function (data) {
//other logic
}
});
return (false);
});
と、ボタンがクリックされたとき、私のコントローラメソッドを呼び出します。 しかし、String1
がキャプチャされずに送信がクリックされると、検証が行われ、エラーメッセージが表示されますが、jquery関数はまだフォームにポストします。
既存の検証フィールドが失敗した場合、jQuery関数がajaxメソッドを呼び出さないようにするにはどうすればよいですか?
検証メッセージが画面に表示されているため、私自身の検証を行う必要はありません。私はちょうど私が私の形で見つけることができる唯一のことは、個々の検証フィールドは
<span class="text-danger field-validation-valid" data-valmsg-for="String1" data-valmsg-replace="true"></span>
例えば、フォームだけjquery.validate.js
はそれがすべてのフォームに追加しますnovalidate=novalidate
タグを持っている
提出を防止する必要がありますオンになっています。
あなたはコード内にそのプラグインをまったく使用していません。 – Jai
すべてのフォームの送信に単純なハンドラが使用されている場合のソリューションを反映するために私の答えを更新しました。 – JotaBe