jQuery pour appeler une Méthode d'Action dans ASP.NET MVC C# par Ajax
J'ai essayé pendant des heures pour obtenir ce travail, et je suis vraiment en espérant que l'un de vous sait (un diable de beaucoup) plus sur ce que I. Lorsque les clés du client dans une zone de texte, je voudrais appeler le MVC C# contrôleur méthode appelée updateOrder(). Idéalement, je voudrais accéder à des éléments de formulaire avec un FormCollection (le formulaire est appelé "createOrder").
Dans le contrôleur, j'ai:
C#
[WebMethod]
public static void updateOrder(){
string s = "asdf";
}
La chaîne de la déclaration ci-dessus est breakpointed. Dans la vue, j'ai une méthode en gros, j'ai copier-collé que j'ai trouvé sur stackoverflow:
JavaScript
function updateOrderJS() {
var $form = $('form[id="createOrder"]');
$.ajax({type : "POST",
url : $form.attr('action'),
data : $form.serialize(),
error : function(xhr, status, error) {},
success : function(response) {
updateOrder();
}
});
return false;
}
L'événement est tout simplement:
JavaScript
updateOrderJS();
La updateOrderJS() la méthode des feux (vérifié avec une alerte), mais le point d'arrêt ne fonctionne pas.
changement de "type", "méthode" dans votre appel ajax par exemple de la méthode : "la POSTE" au lieu de: "type : "POST"
le type est correct.
OriginalL'auteur user4855057 | 2015-05-08
Vous devez vous connecter pour publier un commentaire.
Dans Asp.Net MVC, vous n'avez pas besoin pour décorer votre méthode avec
WebMethod
. Il vous suffit de créer une Action (qui est une méthode) et retourner un résultat. Pour l'échantillon:Et dans votre
View
, vous pouvez essayer un javascript comme ceci (à l'aide de la $.ajax méthode jquery -- voir les commentaires):OriginalL'auteur Felipe Oriani
MVC, vous n'avez pas besoin de la
[WebMethod]
trucs - vous pouvez vous contenter d'un contrôleur de l'action de retour uneActionMethod
(ou null si vous n'avez pas besoin d'une valeur de retour). LeWebMethod
attribut avec des méthodes statiques est pour WebForms, MVC pas.Votre URL dans le javascript serait l'URL de l'action, que vous pouvez obtenir de Rasoir à l'aide de
@Url.Action("updateOrder", "Orders")
, où les "Commandes" est le nom de votre contrôleur.OriginalL'auteur Joe Enos
Assurer "url" est dans le format page.aspx/updateOrder.
Spécifier
datatype: json
Assurer votre
updateOrderJS()
est appelé.Assurer
contentType: "application/json; charset=utf-8"
est inclus.Remarque:
[WebMethod]
est utilisé pour appeler les webforms méthodes, pas de MVC.Je ne suis pas celui qui downvoted vous. Mais je ne pense pas que MVC Url comprennent généralement
page.aspx
. Le type de données et contentType pourrait affecter le modèle de classeur fonctionne, mais je ne suis pas sûr qu'il faudrait affecter si la route est appelée à tous. Et le demandeur a déjà dit dans sa question qu'il a vérifié que updateOrderJS() a été appelé.Le WebMethodAttribute est utilisé dans les formulaires web, comme le sont les méthodes statiques, donc j'chose, il y a confusion ici. J'ai ajouté une note au bas d'expliquer ce trop.
OriginalL'auteur garryp
On dirait que vous êtes de mettre l'URL de la MVC de route dans le
action
attribut de votre<form>
tag. Je ne vois pas ce que l'attribut ressemble parce que vous ne publiez pas votre code html, mais de ce que je peux voir la valeur de cet attribut peut être faux.La plupart du temps, l'URL à un MVC action est
http://ServerDomain/Path(IfAny)/ControllerName/ActionName
. Par exemple, si vous avez un contrôleur et l'action comme ça......et votre ASP.NET l'application est déployée à http://www.example.com l'URL de la page dans le
action
attribut de votre<form>
balise seraithttp://www.example.com/Stack/Overflow
.Bien sûr, il est possible pour les autres paramètres de votre ASP.NET MVC modifier l'une de ces Url, telles que la configuration de l'itinéraire dans votre global.asax est
RegisterRoutes
méthode, ou peut-être si vos contrôleurs sont divisés en Zones. Si l'URL de votre<form>
semble correct, merci de poster le code html ainsi que toute contrôleur de routage de code dans votre ASP.NET app.Si votre formulaire est à l'intérieur d'un Rasoir vue (cshtml fichier), vous pouvez utiliser
<form action="@Url.Action({ controller = "ControllerName", action = "ActionName" })" method="post">
pour générer la forme correcte de l'URL.OriginalL'auteur Joshua Carmody