2008-11-05 7 views
2

J'ai un ASP.Net MVC Ajax.BeginForm qui soumet et met à jour ma page correctement lorsque je clique sur le bouton Soumettre.Autres événements jQuery soumettant mon Ajax.BeginForm

Le problème est que j'ai besoin d'événements supplémentaires pour faire la même chose, comme quand ils changent le texte d'une entrée. Les événements additonnels soumettent correctement le formulaire, mais ils contournent le javascript onsubmit généré sur la balise de formulaire par le Ajax.BeginForm.

est ici la balise form générée par Ajax.BeingForm:

<form action="/Store/UpdateCart" method="post" onsubmit="Sys.Mvc.AsyncForm.handleSubmit(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace, updateTargetId: 'updatedContent' });"> 

Et voici le jQuery pour lier mes autres événements qui doivent soumettre le formulaire via Ajax:

$("#ShippingType, #ViewCart .ddl").bind("change", function() { $("#ViewCartPage form").submit() }); 

Toutes les idées sur la façon d'obtenir ces événements supplémentaires pour déclencher l'onsubmit comme j'en ai besoin aussi?

Répondre

10

Décidé à utiliser simplement une forme régulière, puis le plugin jQuery.Form et cela a fonctionné en 2 secondes! J'aurais aimé faire cette route orginally.

var options = { 
    target: '#updatedContent', // target element(s) to be updated with server response 
    beforeSubmit: showRequest, // pre-submit callback 
    success: showResponse // post-submit callback 
     }; 

$('#ViewCartPage form').ajaxForm(options); 

Man I love jQuery

+0

.ajaxForm() n'existe plus dans jQuery ou ne l'a jamais été. – Brettski

+4

lire mon message - ajaxForm est dans le plugin jQuery.Form que j'ai mentionné dans le post. http://malsup.com/jquery/form/ Merci pour le vote vers le bas! – Slee

0

Ceci est un peu un problème délicat dans la version actuelle de MVC. Vous ne pouvez pas utiliser la fonction "submit()" car elle ne déclenchera pas le gestionnaire d'onsubmit. Au lieu de cela, vous devez appeler le gestionnaire onsubmit directement. Le seul truc est que vous devez passer un argument à onsubmit() quand vous l'appelez. Cet argument est ce qui devient le paramètre "event" dans le gestionnaire (voir la partie "new Sys.UI.DomEvent (event)"). Le paramètre "event" est utilisé par les scripts MVC Ajax pour annuler le comportement par défaut, lorsque vous cliquez sur le bouton Soumettre pour que le contenu Ajax puisse être ininterrompu.

Donc, si vous changez votre code à ceci:

$("#ShippingType, #ViewCart .ddl").bind("change", function() { $("#ViewCartPage form").onsubmit({ preventDefault: function() {} }) }); 

L'événement onsubmit() sera déclenchée lorsque les champs de formulaire changent. Le code crée un objet événement "faux" qui implémente la méthode preventDefault() (qui est la seule que les assistants MVC Ajax utilisent) afin que vous n'obteniez pas d'erreurs.

+0

qui semble simplement arrêter la soumission de formulaire complètement, et ne déclenche jamais l'appel AJAX – Slee

0

Change -

bind("change", function() { $("#ViewCartPage form").submit() }); 

à -

bind("change", function() { $("#ViewCartPage form").onsubmit() }); 
+0

Cela ne fonctionne pas parce que onsubmit n'est pas une fonction ou une propriété de forme. – Slee

3

Microsoft va nous briser sans doute, mais:

function SubmitMvcAjaxForm(formName) { 
    eval('var event = new Object(); event.type="keypress"; ' + document.forms[formName].attributes["onsubmit"].value.replace('(this,', '(document.forms["' + formName + '"],')); 
} 
+0

Cela fonctionne juste! Merci beaucoup. –

+0

J'ai eu un problème similaire et cela a fonctionné parfaitement, vive – Israfel

0

j'utilisais la réponse de Sichbo dans MVC2, mais je l'ai trouvé que avec MVC3 vous ne avez plus besoin de ces solutions de contournement (ie $ ('# votreformform'). submit(); va maintenant fonctionner pour les appels ajax).

Questions connexes