Tôi đang sử dụng ASP.NET 5 MVC RC1
Làm thế nào để trong ASP.NET MVC ngăn chặn jquery ajax nộp nếu xác nhận thất bại
Các plugin validation jquery mà ASP.NET MVC của tôi sử dụng là jquery.validate.js tiêu chuẩn mà một ASP.NET mặc định 5 mẫu dự án sử dụng.
/*!
* jQuery Validation Plugin v1.14.0
*
* http://jqueryvalidation.org/
*
* Copyright (c) 2015 Jörn Zaefferer
* Released under the MIT license
*/
và jquery.validation.unobtrusive.js
/*!
** Unobtrusive validation support library for jQuery and jQuery Validate
** Copyright (C) Microsoft Corporation. All rights reserved.
*/
tôi cung cấp một ví dụ lĩnh vực yêu cầu đơn giản dưới đây để chứng minh vấn đề của tôi.
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>
Việc xác nhận trên hoạt động chính xác. Nếu String1
không bị bắt ở dạng, phương thức POST
KHÔNG được gọi và thông báo lỗi được hiển thị ở phía máy khách.
sau đó tôi sử dụng jquery sau khi tôi muốn nắm bắt tất cả các lần gửi biểu mẫu và làm một số logic thêm:
$(".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 này hoạt động chức năng và gọi phương thức điều khiển của tôi khi nút được nhấp. Tuy nhiên khi String1
không bị bắt và gửi được nhấp, xác thực sẽ khởi động và hiển thị thông báo lỗi nhưng hàm jquery vẫn POSTS biểu mẫu.
Làm cách nào để ngăn chức năng jquery không gọi phương thức ajax nếu các trường xác thực hiện tại không thành công?
Tôi không cần phải thực hiện xác thực của chính mình vì thông báo xác thực đang được hiển thị trên màn hình. Tôi chỉ cần để ngăn chặn việc nộp
Điều duy nhất tôi có thể tìm thấy ở dạng của tôi là các lĩnh vực xác nhận cá nhân ví dụ như
<span class="text-danger field-validation-valid" data-valmsg-for="String1" data-valmsg-replace="true"></span>
và hình thức duy nhất có thẻ novalidate=novalidate
mà jquery.validate.js
thêm vào tất cả các hình thức đó là đã bật.
bạn chưa sử dụng plugin đó trong mã của mình. – Jai
Tôi đã cập nhật câu trả lời của mình để phản ánh giải pháp cho trường hợp một trình xử lý đơn giản được sử dụng cho tất cả các lần gửi biểu mẫu. – JotaBe