Vue partielle dynamic + détournement de formulaire jquery + validation du client = ne fonctionne pas

J’utilise MVC 3 avec javascript discret pour la validation du client.

J’ai une table avec des lignes qui sont cliquables. Lorsque je clique dessus, je souhaite afficher une vue partielle chargée de manière dynamic. Voici le code pour ceci:

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

Jusqu’ici tout fonctionne. Le problème, c’est quand j’essaie de sauvegarder quelque chose dans le partiel en utilisant jquery. Le formulaire est détourné, comme ceci:

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

Tout cela fait que la validation du client ne fonctionne pas. Cela rend juste la publication même si j’ai omis certaines valeurs requirejses. Tout cela fonctionne si je n’utilise pas ajax pour poster ou si le partiel est chargé au chargement de la page (non dynamic).


Ce que j’ai essayé

J’ai essayé de mettre cela avant le post:

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

Cela retourne juste à chaque fois mais ..

De ce post, j’ai 2 suggestions ASP.NET MVC 2 chargement vue partielle à l’aide de jQuery – pas de validation côté client

Ajouter

 Sys.Mvc.FormContext._Application_Load(); 

après le chargement du partiel .. Et définissez le type de données de la publication sur “html”. Ni travaillé.

J’ai aussi essayé cette méthode sans succès: http://www.deepcode.co.uk/2010/08/mvc-ootb-validation-when-pulling-in.html

Cette combinaison de techniques est quelque chose de très commun, je suppose, pourquoi est-ce si difficile de le faire fonctionner? Toute aide est grandement appréciée. Je vous remercie

Lors du chargement ajax réussi du nouveau formulaire, vous devez indiquer à la bibliothèque de validation non intrusive d’parsingr le nouveau formulaire en appelant manuellement:

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

Ceci configure les validateurs jquery.validation en fonction de l’atsortingbut data-xxx dans les éléments enfants de formulaires.

Après cela, l’appel $('

').validate().form()

devrait fonctionner comme prévu!

Pourquoi essayez-vous de détourner la forme partielle? Je pense que parce que vous détournez de la forme, les événements en direct discrets ne se déclenchent pas et c’est pourquoi vous n’obtenez pas d’erreurs de validation.

Avez-vous essayé d’utiliser un formulaire Ajax? (Ajax.BeginForm(...))

Si vous apportez un formulaire ajax partiel, il devrait contenir toutes les informations nécessaires à la validation. Une fois le formulaire soumis, vous pouvez spécifier une fonction javascript à exécuter.

Ok enfin je l’ai eu. Le problème était là, peu importe si je saluais la forme ou si j’avais utilisé Ajax.BeginForm (…), il n’y avait aucune différence. Et cela fonctionnait toujours si je n’avais pas chargé le partiel dynamicment.

La solution?

Ajoutez jquery.validate.unobtrusive.min.js à la vue partielle . Cela pourrait être une erreur de débutant, en l’ajoutant uniquement à la vue parent ou à une page maître, mais si cela aide quelqu’un, je vais volontiers l’admettre. C’est ce fichier js qui fait fonctionner la validation du client et doit bien entendu être appelé à chaque fois qu’un partiel (contenant une validation client) est chargé.