MVC 3 AJAX et

J’ai déjà posé une question à ce sujet et obtenu une réponse intéressante qui m’a amené à poser d’autres questions. Voici donc la prochaine question de mon parcours pour comprendre le fonctionnement interne des publications AJAX et l’agacement plutôt gênant ValidateAntiForgeryTokenAtsortingbute .

J’ai un _layout.cshtml, c’est ici que se trouvent tous les goodies du script. J’ai une page de connexion qui rend trois partiels, un pour les connexions OpenID, qui est simplement un @using(Html.BeginForm()) {} normal @using(Html.BeginForm()) {} , un pour la connexion locale et l’autre pour l’enregistrement de base. Le login partiel et le registre partiel utilisent tous deux ViewModels et Ajax.BeginForm

Veuillez noter que j’utilise @using Ajax.BeginForm utilisant @using Ajax.BeginForm et que je @using Ajax.BeginForm data-ajax-update pour mettre à jour l’élément en cas de succès.

Script dans _layout.cshtml:

 $(document).ready(function () { $('input[type=submit]').live("click", function (event) { event.preventDefault(); var _allFormData = $(this).parents().find('form'); var _currentForm = $(this).closest('form'); var _updateElement = $(_currentForm).attr("data-ajax-update"); $.ajax({ type: "POST", url: $(_currentForm).attr('action'), data: $(_allFormData).serialize(), success: function (data) { $(_updateElement).html(data); } }); return true; }); }); 

Élément de formulaire dans _layout.cshtml

 

Méthode d’action dans le contrôleur:

 public ActionResult RegisterMember( RegisterMemberViewModel registerMemberViewModel) { // Process some stuff return PartialView("_Register"); } 

Pourquoi cela fonctionne-t-il, comme par magie, l’ AntiForgeryToken est inclus dans tous mes messages. Je ne l’attrape pas et je ne l’applique pas, je ne fais rien avec, vraiment, c’est juste là. Quelqu’un peut-il s’il vous plaît éclaircir un peu pourquoi cela fonctionne. Je n’aime pas les solutions accidentelles, elles se cassent généralement plus tard.

Le @Html.AntiForgeryToken() crée un ou quelque chose de similaire dans votre formulaire. Et si je comprends bien ceci: var _allFormData = $(this).parents().find('form'); en combinaison avec ceci: data: $(_allFormData).serialize() toutes vos données de formulaire sur le serveur, y compris le champ d’ __RequestVerificationToken que MVC recherche probablement,