2010-03-31 6 views
0

Je voudrais utiliser l'assistant ajax pour créer des requêtes ajax qui envoient des données dynamiques supplémentaires avec le poste (par exemple, obtenir le dernier élément avec class = blogCommentDateTime et envoyer le valeur de ce dernier au contrôleur qui ne retournera que les commentaires du blog après).asp.net mvc ajax formulaire assistant/poste données supplémentaires

Je l'ai fait avec succès si avec l'aide du plug-in jQuery Form comme ceci:

$(document).ready(function() { 
     $("#addCommentForm").submit(function() { 

      var lastCommentDate = $(".CommentDateHidden:last").val(); 
      var lastCommentData = { lastCommentDateTicks: lastCommentDate }; 
      var formSubmitParams = { data: lastCommentData, success: AddCommentResponseHandler } 

      $("#addCommentForm").ajaxSubmit(formSubmitParams); 
      return false; 
     }); 

Ce formulaire a été créé avec la méthode Html.BeginForm().

Je me demande s'il existe un moyen facile de le faire en utilisant l'assistant ajax.beginform()? Lorsque j'essaie d'utiliser le même code mais de remplacer html.beginform() par ajax.beginform(), lorsque j'essaie de soumettre le formulaire, j'émets 2 messages (ce qui est compréhensible, l'un étant pris en charge par l'assistant, l'autre par moi avec le JS ci-dessus.Je ne peux pas créer 2 demandes, donc cette option est sortie)

J'ai essayé de se débarrasser du retour faux et en changeant ajaxSubmit() à ajaxForm() de sorte que cela ne ferait que «préparer» le formulaire, et cela ne mène qu'à un seul article, mais il n'inclut pas le paramètre supplémentaire que j'ai défini, donc cela ne vaut rien non plus. J'ai ensuite essayé de conserver l'ajaxForm() mais j'appelais cela chaque fois que le bouton submit sur le formulaire est cliqué plutôt que lorsque le formulaire est soumis (je suppose que c'est presque la même chose) et cela aboutit également à 2 posts. La principale raison pour laquelle je pose cette question est que j'ai rencontré quelques problèmes avec le javascript ci-dessus et que j'utilise la validation mvc fournie par le framework mvc (pour lequel je vais poser une autre question) et je voudrais le savoir donc je peux plonger plus loin dans mon problème de validation.

+0

Avez-vous trouvé une solution pour cela? – cdpnet

Répondre

1
function beginPost() { 
     $("form").ajaxSubmit({ data: { id: "idnum", random: "randomness"} }); 
     return false;   
    } 


using (Ajax.BeginForm(new AjaxOptions{ UpdateTargetId = "TargetDiv", OnBegin = "beginPost" }) 

Jusqu'à présent, c'est la meilleure façon de trouver une solution. C'est un hack car il remplace le câblage initial que l'assistant ajax a fait pour vous et dans l'exemple ci-dessus (il renvoie correctement ma vue partielle, mais updatetargetid donné dans mon assistant ajax n'est pas retenu donc il jette fondamentalement la réponse, je pourrais corrigez ce paramètre dans l'appel .ajaxSubmit, mais cela nie les avantages de l'utilisation de l'assistant ajax) Je pense que je m'en tiendrai à ma méthode précédente d'utilisation du plugin de formulaire jQuery avec html helper pour écrire mes formulaires. Dans l'exemple ci-dessus, je le soumets manuellement avec l'appel à .ajaxSubmit, puis retourne false pour que la page ne continue pas et ne soit pas postée car l'assistant ajax l'avait câblé pour le faire. Mon autre méthode, qui est aussi un énorme bidouillage (et je n'ai même pas essayé), consistait à essayer d'insérer des champs cachés dynamiquement dans le formulaire avec l'attribut name défini sur ce que je voulais que mes données additionnelles soient transmises au contrôleur et faire tout cela dans la méthode beginPost. Je vais coller à la forme normale et le câblage avec le plugin de forme de jquery