我使用ASP.NET 5 MVC RC1
如何在ASP.NET MVC,以免jQuery AJAX提交如果驗證
我的ASP.NET MVC採用的是標準的jquery.validate.js一個默認的ASP.NET jQuery的驗證插件失敗5模板項目使用。
/*!
* 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.
*/
我在下面提供一個簡單的必填字段例子來說明我的問題。
視圖模型:
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,因爲我想捕捉所有表單提交,並做一些額外的邏輯:
$(".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);
});
這個jQuery功能的作品,並打電話給我的控制器方法是單擊按鈕時。 但是,當String1
未被捕獲並單擊提交時,驗證會啓動並顯示錯誤消息,但jquery函數仍然呈現該表單。
如何防止jquery函數在現有驗證字段失敗時不調用ajax方法?
當屏幕上顯示驗證消息時,我不需要自己進行驗證。我只是需要防止提交
我能找到我的表格的唯一事情是獨立的校驗字段,例如
<span class="text-danger field-validation-valid" data-valmsg-for="String1" data-valmsg-replace="true"></span>
和形式不僅具有novalidate=novalidate
標籤,它的jquery.validate.js
增加了各種形式的是啓用。
你根本沒有在你的代碼中使用該插件。 – Jai
我已經更新了我的答案,以反映爲所有表單提交使用簡單處理程序的情況下的解決方案。 – JotaBe