Comment soumettre un dropdownlist dans asp.net mvc, à partir d'un formulaire Ajax
Comment faites-vous envoyer à partir d'un dropdownlist "onchange" événement de l'intérieur de l'ajax formulaire?
En fonction de la question suivante: Comment soumettre un dropdownlist dans asp.net mvc, à partir de l'intérieur de un Html.BeginFrom vous pouvez définir onchange="this.forme.soumettre" et la modification de la liste déroulante des postes en arrière.
Cependant, en utilisant le code suivant (à l'intérieur de l'Ajax.BeginFrom):
<% using (Ajax.BeginForm("UpdateForm", new AjaxOptions() { UpdateTargetId = "updateText" })) { %>
<h2>Top Authors</h2>
Sort by: <%=Html.DropDownList("sortByList", new SelectList(ViewData["SortOptions"], new { onchange = "this.form.submit()" })%>
<%= Html.TextBox("updateText")%>
<% } %>
Postes vers le contrôleur de l'action, mais l'ensemble de la page est remplacée par le contenu de la "updateText" du texte, plutôt que ce qui est à l'intérieur de la "updateText" zone de texte.
Ainsi, plutôt que de les remplacer simplement la zone à l'intérieur de l'Ajax.BeginForm, la page entière est remplacé.
Quelle est la bonne façon pour la dropdownlist à appeler cette.forme.soumettre telles que seule la zone à l'intérieur de l'Ajax.BeginForm?
Vous devez vous connecter pour publier un commentaire.
OK, près de 2 ans plus tard, vous n'avez probablement pas plus attention. Qui sait: Peut-être que d'autres (comme moi 😉 n'.
Alors, voici la (très simple) solution:
Dans votre
Html.DropDownList(...)
appel, changementà
Pouvez-vous repérer la différence? 😉
La raison en est que
Ajax.BeginForm()
crée un formulaire avec unonsubmit()
gestionnaire de soumettre le formulaire en mode asynchrone. En appelantsubmit()
, vous ignorez ceonsubmit()
gestionnaire personnalisé. L'appel deonsubmit()
a fonctionné pour moi.dans votre liste déroulante remplacer
à
Ce que vous pouvez essayer de le faire de cette (jQuery requis):
J'ai eu le même problème aussi. J'ai eu plusieurs listes déroulantes dans les vues partielles de sorte qu'ils pourraient actualiser de façon indépendante, mais que la définition de la "onchange" attribut gardé de l'actualisation de l'ensemble de la page.
J'ai remarqué que "cette.forme.submit()" réfère toujours à la forme principale, en dehors de la vue partielle. Donc, au lieu de cela, j'ai ajouté un bouton de soumission à l'intérieur de l'AJAX formulaire et mentionné que:
Mon "Modèle.IdIdex" est juste une variable d'accès différents contrôles dans la même page.
Espérons que cela aide.
Si vous êtes en utilisant MVC alors probablement la meilleure façon est avec jQuery...
Votre contrôleur serait quelque chose comme:
J'ai eu un bouton comme ça dans mon AJAX.BeginForm
Et onsubmit ou la solution de Francisco n'a pas fonctionné (je ne sais toujours pas pourquoi)
J'ai donc créé un autre:
Pouvons-nous voir votre Contrôleur de code? Vous pouvez utiliser la Demande.IsMvcAjaxRequest() dans votre contrôleur pour le retour d'une partie seulement des données si c'est une Requête Ajax au lieu d'une Vue d'ensemble. À votre avis, déplacez votre formulaire à un PartialView et appel
Html.RenderPartial("viewname");
Dans votre Contrôleur:
if (Request.IsMvcAjaxRequest())
{
return PartialView("viewname");
}
else
{
//Non Ajax code here.
}