Как в ASP.NET MVC предотвратить JQuery AJAX представить, если проверка не проходит

Я использую ASP.NET 5 MVC RC1

Плагины проверки jquery, которые использует мой ASP.NET MVC, - это стандартный jquery.validate.js, который используется в шаблонном проекте ASP.NET 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.
*/

Ниже приведен простой пример поля Обязательное для демонстрации моей проблемы.

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, так как я хочу перехватить все отправленные формы и выполнить некоторую дополнительную логику:

   $(".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 не захвачено и нажата кнопка submit, проверка запускается и показывает сообщение об ошибке, но функция jquery все еще УСТАНАВЛИВАЕТ форму.

Как запретить функции jquery не вызывать метод ajax, если существующие поля проверки не пройдены?

Мне не нужно выполнять собственную проверку, так как сообщение проверки отображается на экране. Мне просто нужно предотвратить отправку

Единственное, что я могу найти в своей форме, это отдельные поля проверки, например,

 <span class="text-danger field-validation-valid" data-valmsg-for="String1" data-valmsg-replace="true"></span>

, и форма имеет только тег novalidate=novalidate, который jquery.validate.js добавляет ко всем формам, на которых он включен.

9
задан Sparky 12 February 2016 в 15:23
поделиться