Проверка на стороне клиента jquery не работает в частичном представлении MVC3 - программирование
Подтвердить что ты не робот

Проверка на стороне клиента jquery не работает в частичном представлении MVC3

Мне не показалось, что процедура проверки на стороне клиента работает со следующим частичным представлением. Это представление находится внутри divsettings div в родительском представлении. Пробовал много вещей из stackoverflow и других сайтов, ничего не работает. Есть идеи?

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>


@using (Ajax.BeginForm("CreateT", "TAdmin", null,
        new AjaxOptions { HttpMethod = "Post", UpdateTargetId = "divTSettings"},
                       new { id = "CreateTForm" }))
{
    <div>
        <label>Name:</label>
        <input type="text" name="tName" id="tName"/>
        @Html.ValidationMessage("tName")
        <input type="submit" value="Submit"/>
    </div>
}

<script type="text/javascript">
$(function() {
    $('#CreateTForm').validate({
        rules: {
            tName: {
                required: true
            }
        },
        messages: {
            tName: {
                required: 'Name required'
            }
        }
    });
    $("#CreateTForm").removeData("validator");
    $("#CreateTForm").removeData("unobtrusiveValidation");
    $.validator.unobtrusive.parse("#CreateTForm");
});
</script>
4b9b3361

Ответ 1

Любые идеи?

Да, самое первое, что вам нужно сделать, это избавиться от всех тегов <script> от вашего частичного представления. Частичные представления не должны содержать никаких скриптов. Частичные представления должны содержать только разметку. Я повторял это много раз и все еще вижу, как люди создают скрипты. Скрипты должны быть зарегистрированы либо в вашем макете, либо в главном представлении, в котором вы предоставили частичный, возможно, переопределив часть скриптов, зарегистрированную в вашем макете, чтобы все сценарии вставили в конец вашего HTML-документа непосредственно перед закрытием </body>. То, где они принадлежат.

ОК, теперь к реальной проблеме: ненавязчивая проверка не работает из-за коробки с динамически добавленными элементами в DOM - например, отправив запрос AJAX на сервер, который возвращает частичное представление, и это частичный вид затем вводится в DOM.

Чтобы сделать его работу, вам необходимо зарегистрировать эти вновь добавленные элементы с помощью ненавязчивой системы проверки. Для этого вам нужно вызвать $.validator.unobtrusive.parse для вновь добавленных элементов:

$("form").removeData("validator");
$("form").removeData("unobtrusiveValidation");
$.validator.unobtrusive.parse("form");

Вы должны поместить этот код внутри обработчика успеха AJAX, который вводит частичное в ваш DOM. После того, как вы ввели новые элементы, просто вызовите эту функцию.

И если вы не пишете свои запросы AJAX вручную с помощью jQuery ($.ajax, $.post,...), но полагаетесь на некоторые помощники Ajax.BeginForm, а помощники Ajax.ActionLink выполняют эту работу за вас, вам понадобятся чтобы подписаться на обратный вызов OnSuccess в AjaxOptions и поставить там этот код.