Comment publier ASP.NET MVC, Ajax formulaire à l'aide de JavaScript plutôt que le bouton soumettre
J'ai un simple formulaire créé à l'aide de Ajax.BeginForm
:
<% using (Ajax.BeginForm("Update", "Description", new { id = Model.Id },
new AjaxOptions
{
UpdateTargetId = "DescriptionDiv",
HttpMethod = "post"
},new {id ='AjaxForm' })) {%>
Description:
<%= Html.TextBox("Description", Model.Description) %><br />
<input type="submit" value="save" />
<% }%>
Le contrôleur est branché et renvoie une vue partielle qui met à jour la DescriptionDiv
. Et tout cela fonctionne parfaitement.
Maintenant, je voudrais être en mesure de soumettre ce formulaire sans avoir le bouton envoyer (via un clic sur un lien ou sur une image ou quoi que ce soit). Malheureusement, ce petit jQuery extrait de ne pas faire le travail:
$('form#AjaxForm').submit();
Il ne soumettez le formulaire, mais n'en fait je suppose qu'il n'est pas surprenant) à un poste d'arrière et pas un Ajax un.
Par souci de simplicité, le ci-dessus jQuery est câblé comme ceci:
<a href="#" onclick="$('form#AjaxForm').submit(); return false;">submit</a>
Le onsubmit du formulaire est d'utiliser le Sys.Mvc.AsyncForm.handleSubmit() mais le jQuery soumettre semble passer à côté de cette.
PS. Je suis à la recherche d'une solution dans cette approche particulière. Je sais comment obtenir le même à l'aide d'une forme normale et le poster à l'aide d'AJAX+jQuery. Je suis intéressé par cette solution particulière si.
Vous devez vous connecter pour publier un commentaire.
Je vais supposer que votre manque de guillemets autour du sélecteur est juste une erreur de transcription, mais vous devriez vérifier de toute façon. Aussi, je ne vois pas où vous en êtes réellement donner la forme d'un identifiant. Habituellement, vous faites cela avec la htmlAttributes paramètre. Je ne vois pas de vous en utilisant la signature qui a il. Encore une fois, cependant, si la forme est la soumission à tous, cela pourrait être une erreur de transcription.
Si le sélecteur et les id ne sont pas le problème, je suis à soupçonner qu'il pourrait être parce que le gestionnaire de clic est ajoutée via des balises lorsque vous utilisez l'Ajax BeginForm extension. Vous pouvez essayer en utilisant $('form').trigger('submit') ou, dans le pire des cas, ont le gestionnaire de clic sur le point d'ancrage de créer un bouton d'envoi masqué dans le formulaire et cliquez sur elle. Ou même créer votre propre ajax présentation à l'aide de pure jQuery (ce qui est probablement ce que je ferais).
Enfin, vous devez réaliser que, en remplaçant le bouton "soumettre", vous allez totalement briser ce pour les personnes qui n'ont pas javascript activé. Le moyen de contourner cela est de disposer également d'un bouton caché à l'aide d'une balise noscript et de gérer les deux AJAX et non-AJAX messages sur le serveur.
BTW, c'est considérer comme une pratique standard, Microsoft ne résistant pas, à ajouter des gestionnaires via javascript via le balisage. Cela garantit que votre javascript organisés en un seul endroit, donc vous pouvez plus facilement voir ce qui se passe sur le formulaire. Voici un exemple de la façon dont je voudrais utiliser le mécanisme de déclenchement.
$('form#ajaxForm').submit();
A fonctionné pour moi avec jQuery 1.4.4 et MVC 3. MAIS je m'a fallu du temps pour comprendre que vous devez avoir des fichiers de script référencé ou ce retour à la poste-retour. Les fichiers sont dans mon cas: jquery.discrète-ajax.(min.)js + MicrosoftAjax et MicrosoftMvcAjaxUn exemple simple, où un changement sur une liste déroulante déclenche une requête ajax formulaire de soumettre pour recharger un datagrid:
Le trigger('onsubmit") est la clé de la chose: il appelle le onsubmit fonction qui MVC a greffé sur le formulaire.
NB. Le UserSearchResults contrôleur retourne une PartialView qui rend une table en utilisant le Modèle fourni
onsubmit
soulevé un JS erreur, à l'aide desubmit
n'a pas. Simple que cela. Je n'ai pas vraiment de lui donner beaucoup plus penser.Malheureusement, le déclenchement de la onsubmit ou soumettre des événements ne fonctionnent pas dans tous les navigateurs.
Aussi, si vous trigger('submit') dans Chrome ou IE, il provoque l'intégralité de la page pour être affichés plutôt que de faire de l'AJAX comportement.
Ce qui fonctionne pour tous les navigateurs est retrait de l'événement onsubmit comportement et de l'appeler juste submit() sur le formulaire lui-même.
Aussi, le lien n'a pas à figurer dans le formulaire pour que cela fonctionne.
J'ai essayé un peu de temps pour obtenir l'ajax formulaire de soumission fonctionne parfaitement, mais toujours rencontré soit un échec complet ou trop de compromis. Voici un exemple de page qui utilise le jQuery Forme de plug-in à l'intérieur d'un MVC page pour mettre à jour une liste de projets (à l'aide d'un rendu partiellement de contrôle) que l'utilisateur tape dans une zone de saisie:
Et sur le contrôleur de côté:
Ajax.BeginForm semble être un échec.
Utilisant un Html.Commencer pour, cela fait l'affaire tout aussi bien:
Essayez de la manière suivante:
Plutôt que d'utiliser JavaScript peut-être essayer quelque chose comme
Placez simplement le bouton normal de l'indide Ajax.BeginForm et cliquez sur rechercher formulaire parent et normal de se soumettre. Ajax formulaire de Rasoir:
et Javascript: