MVC3 с использованием jquery.validate.unobtrusive.js и $(#form).submit() hijax не работает

у меня основная форма

@Html.ValidationSummary(true)
using (Html.BeginForm("Index", "Home", FormMethod.Post, new { @class = "form" }))
{
     <div class="editor-label">
         <label for="Name">@Html.LabelFor(model => model.Name)</label>
     </div>
     <div class="editor-field">
         @Html.EditorFor(model => model.Name)
     </div>

и так далее. Моя модель использует аннотации данных, и проверка включена.

Я перехватываю форму, используя jquery:

<script type="text/javascript">
    $("form[action='/']").submit(function () {
        $.post($(this).attr("action"), $(this).serialize(), function (response) {
            $("#contactForm").replaceWith($("#contactForm", response));
        });
        return false;
    });
</script>

Это работает, если я правильно ввожу поля и отправляю. Но странно то, что если я ввожу недопустимое значение в одно из полей формы, и код проверки срабатывает, чтобы подчеркнуть мою ошибку, функция отправки события, которую я добавил в вышеприведенный скрипт hijaxing, теряется, и происходит полное сообщение.

Любые хорошие идеи относительно того, как я могу обойти это?


person Tom Miller    schedule 31.10.2011    source источник


Ответы (1)


Я думаю, что когда вы добавляете обработчик отправки в свою форму, вы перезаписываете обработчик отправки, который добавляет аннотация проверки/данных jquery.

Чтобы обойти это, вы можете добавить:

var theForm = $(this);
if ( theForm.valid() ) {
    $.post($(this).attr("action"), $(this).serialize(), function (response) {
        $("#contactForm").replaceWith($("#contactForm", response));
    });
    return false;
}

Это позволит убедиться, что форма действительна, прежде чем делать POST.

person Dismissile    schedule 31.10.2011
comment
Спасибо. Кажется, это проблема. - person Tom Miller; 31.10.2011
comment
@Dismissile Я не вижу, где вы подключаете отправку? Я, наверное, просто что-то пропустил, был долгий день :) - person Adam Tuliper - MSFT; 04.11.2011
comment
@AdamTuliper код, который дал Dismissile, является дополнением к тому, что уже было у Тома Миллера. - person Tigran; 25.06.2012