Динамическое частичное представление + угон формы jquery + проверка клиента = не работает - PullRequest
5 голосов
/ 11 февраля 2011

Я использую MVC 3 с ненавязчивым JavaScript для проверки клиента.

У меня есть таблица со строками, которые можно нажимать. При нажатии я хочу вызвать динамически загруженное частичное представление. Вот код для этого:

function GetStuff(id) {
    $.ajax(
    {
        url: "Edit/" + id,
        success: function (result) {
            $("#DivTest").html(result);
        }
    });
}

Это далеко все работает. Проблема в том, что когда я пытаюсь сохранить что-то частично, используя jquery. Форма угоняется, как это:

$(function () {
    $.post($(this).attr("action"),
        $(this).serialize(),
        function (data) {
            alert("test");
        });
    e.preventDefault();
});

Все это делает проверку клиента неработоспособной. Это просто делает сообщение, даже если я пропустил некоторые обязательные значения. Это все работает, если я не использую ajax для публикации или если частичное загружается при загрузке страницы (не динамически).


Что я пробовал:

Я пытался поставить это перед постом:

if($('form').validate().form()){
    ...
}

Это просто возвращает истину каждый раз, хотя ..

Из этого поста я получил 2 предложения ASP.NET MVC 2 загрузка частичного представления с использованием jQuery - без проверки на стороне клиента

Добавление

Sys.Mvc.FormContext._Application_Load(); 

после того, как частичное было загружено .. И установите тип данных поста "html". Ни один не работал.

Я тоже попробовал этот метод без удачи: http://www.deepcode.co.uk/2010/08/mvc-ootb-validation-when-pulling-in.html

Я полагаю, что эта комбинация техник очень распространена, почему так сложно заставить ее работать? Любая помощь высоко ценится. Спасибо

Ответы [ 3 ]

14 голосов
/ 12 февраля 2011

При успешной загрузке Ajax новой формы вы должны указать ненавязчивой библиотеке проверки для анализа новой формы, вручную вызвав:

// insert new form into the DOM first, then call:
$.validator.unobtrusive.parse('<form selector>'));
$('<form selector>').validate(); // start validating

Это устанавливает валидаторы jquery.validation в соответствии с атрибутом data-xxx в дочерних элементах форм.

После этого звонок $('<form selector>').validate().form() должен работать как положено!

1 голос
/ 11 февраля 2011

Почему вы пытаетесь угнать частичную форму? Я думаю , потому что ваше похищение формы ненавязчивыми живыми событиями не запускается, и поэтому вы не получаете ошибок проверки.

Вы пытались использовать форму Ajax? (Ajax.BeginForm(...))

Если вы вводите частичную форму AJAX, в ней должна быть вся информация, необходимая для проверки. После отправки формы вы можете указать функцию javascript для запуска.

0 голосов
/ 12 февраля 2011

Хорошо, наконец, я понял.Проблема была там, независимо от того, присоединил я форму или использовал Ajax.BeginForm (...), никакой разницы нет.И это всегда работало, если я не загружал частичное динамически.

Решение?

Добавьте jquery.validate.unobtrusive.min.js в частичный вид.Это может быть ошибкой новичка, добавив ее только в родительское представление или главную страницу, но если это кому-то поможет, я с удовольствием признаю эту мою ошибку :) Именно этот js-файл делает проверку клиента работоспособной, и, конечно, она должнавызываться каждый раз, когда загружается частичное (с проверкой клиента).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...