$('#MyForm'). Valid() всегда возвращает false

Я пытаюсь опубликовать форму с помощью ajax post в mvc razor. И я пытаюсь проверить форму перед публикацией в базе данных. Но хотя форма действительна, она блокирует публикацию.

$(function () {
    $('#MyForm').submit(function () {
        if ($('#MyForm').valid()) {
        //$("#divLoading").show();
        $.ajax({
            type: "POST",
            url: '@Url.Action("Something", "Something")',
            data: $('#MyForm').serialize(),
            dataType: 'json',
            error: function (xhr) {
                $("#Message").text(xhr.statusText);
                $('#divLoading').hide('fast');
            },
            success: function (result) {
                //$('#divLoading').hide('fast');
                if (result.IsSuccess) {
                    $("#Message").html(result.Message);
                    $('#MyForm')[0].reset();
                }
            }
        });
        }
    });
});

Начальная форма содержит

@using (Ajax.BeginForm("Something", "Something", new AjaxOptions { InsertionMode = InsertionMode.Replace, HttpMethod = "POST" }, new { @id = "MyForm" }))
{
}

Заранее спасибо

1 ответ

Ваша проблема здесь в том, что вы все еще используете действие по умолчанию для формы, поэтому страница будет перезагружаться до получения ответа ajax. Попробуй это:

$('#MyForm').submit(function (event) {
event.preventDefault();

if ($('#MyForm').valid()) {
    //$("#divLoading").show();
    $.ajax({
        type: "POST",
        url: '@Url.Action("Something", "Something")',
        data: $('#MyForm').serialize(),
        dataType: 'json',
        error: function (xhr) {
            $("#Message").text(xhr.statusText);
            $('#divLoading').hide('fast');
        },
        success: function (result) {
            //$('#divLoading').hide('fast');
            if (result.IsSuccess) {
                $("#Message").html(result.Message);
                $('#MyForm')[0].reset();
            }
        }
    });
}

где это разница:

$('#MyForm').submit(function (event) {
    event.preventDefault();
Другие вопросы по тегам