MVC Ajax.ActionLink ne trouve pas la méthode POST
-
27-09-2019 - |
Question
J'ai une méthode POST déclaré dans mon contrôleur:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult UpdateComments(int id, string comments)
{
// ...
}
et un ActionLink à mon avis:
<%= Ajax.ActionLink("update", "UpdateComments",
new { id = Model.Id, comments = "test" },
new AjaxOptions {
HttpMethod="POST",
OnFailure="alert('fail');",
OnSuccess = "alert('success');"
})%>
Je reçois un « introuvable » erreur quand il tente d'acheminer cette demande.
Si je supprime la restriction POST de la méthode UpdateComments dans le contrôleur, il fonctionne très bien.
Qu'est-ce que je manque?
La solution
Il semble qu'il n'a pas aimé la façon dont je déclarais mes callbacks OnFailure
et OnSuccess
. Je suppose que ce n'a pas pu analyser mon objet AjaxOptions
donc ignorait le réglage HttpMethod="POST"
.
Je l'ai travail en changeant à:
OnFailure="function() { alert('fail'); }",
OnSuccess="function() { alert('success'); }"
Autres conseils
J'apprends ASP.MVC en ce moment et j'ai eu cette question avec mon Ajax.ActionLink, je suis une méthode GET et non une méthode POST comme il s'était. Alors je me rends compte que je n'ai pas ajouté les scripts référence bibliothèque:
<script src=”/Scripts/MicrosoftAjax.js” type=”text/javascript”></script>
<script src=”/Scripts/MicrosoftMvcAjax.js” type=”text/javascript”></script>
Après l'ajout du script, il a bien fonctionné!
FormCollection a un liant par défaut associé à ce qui a toujours initialise la collection et vous devrait jamais nulle. C'est plus probable que vous avez un vide collection lors de l'utilisation Ajax.ActionLink contrairement à l'utilisation d'une forme bouton de soumission. En effet, le méthode POST ActionLink ne pas former des valeurs lorsqu'il exécute le AJAX demande. Ce poste est le unswer à vous la question
essayez d'inclure
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript"></script>