Подтверждение использования ненавязчивого перед постом ajax - PullRequest
5 голосов
/ 01 сентября 2011

Итак, я играл с токеном Anti Forgery, прогрессировал , спасибо вам, ребята.

Я нашел решение для слияния значений форм, и чтобы мои ActionMethods не стравливали токен AntiForgery ... Я, к сожалению, нарушил проверку в процессе. Пост AJAX запускается до того, как проверка на стороне клиента / проверка на стороне клиента игнорируется. Серверная сторона работает, однако я бы выкопал некоторую проверку перед публикацией. Вот код, который я использую.

$(document).ready(function () {
 $('input[type=submit]').live("click", function (event) {
     event.preventDefault();

     // Form with the AntiForgeryToken in it
     var _tokenForm = $(this).parents().find("#__AjaxAntiForgeryForm");

     // Current Form we are using
     var _currentForm = $(this).closest('form');

     // Element to update passed in from AjaxOptions
     var _updateElement = $(_currentForm).attr("data-ajax-update");

     // Serialize the array
     var arr = $(_currentForm).serializeArray();

     //Merge TokenForm with the CurrentForm
     $.merge(arr, $(_tokenForm).serializeArray());


     // The AJAX Form Post stuff
     $.ajax({
         type: "POST",
         url: $(_currentForm).attr('action'),
         data: arr,
         success: function (data) {
             $(_updateElement).html(data);
         }
     });

     return false;
 });

});

Так что я думаю, что мне нужно как-то обработать проверку на стороне клиента перед тем, как $ .ajax goo ... Любые предложения могут сэкономить мне время.

1 Ответ

19 голосов
/ 01 сентября 2011

Позвоните по этому номеру:

var formValid = $("#FormId").validate().form();

if (!formValid) return false;

Добавлено в ваш код:

$(document).ready(function () {
 $('input[type=submit]').live("click", function (event) {
     event.preventDefault();

     // Form with the AntiForgeryToken in it
     var _tokenForm = $(this).parents().find("#__AjaxAntiForgeryForm");

     // Current Form we are using
     var _currentForm = $(this).closest('form');

     var isValid = $(_currentForm).validate().form();

     if (!isValid) return false;

     // Element to update passed in from AjaxOptions
     var _updateElement = $(_currentForm).attr("data-ajax-update");

     // Serialize the array
     var arr = $(_currentForm).serializeArray();

     //Merge TokenForm with the CurrentForm
     $.merge(arr, $(_tokenForm).serializeArray());


     // The AJAX Form Post stuff
     $.ajax({
         type: "POST",
         url: $(_currentForm).attr('action'),
         data: arr,
         success: function (data) {
             $(_updateElement).html(data);
         }
     });

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