2010-06-14 17 views
13

Tengo un método POST declaró en mi controlador:MVC Ajax.ActionLink no encuentra método POST

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult UpdateComments(int id, string comments) 
{ 
    // ... 
} 

y un ActionLink en mi opinión:

<%= Ajax.ActionLink("update", "UpdateComments", 
         new { id = Model.Id, comments = "test" }, 
         new AjaxOptions { 
           HttpMethod="POST", 
           OnFailure="alert('fail');", 
           OnSuccess = "alert('success');" 
          })%> 

me sale un "no encontrado "error cuando intenta enrutar esta solicitud.

Si elimino la restricción POST del método UpdateComments en el controlador, funciona bien.

¿Qué me estoy perdiendo?

Respuesta

7

Parece que no le gustó la forma en que estaba declarando mis OnFailure y OnSuccess devoluciones de llamada. Supongo que no pudo analizar mi objeto AjaxOptions, por lo que ignoró la configuración HttpMethod="POST".

Lo tengo trabajo cambiándola a:

OnFailure="function() { alert('fail'); }", 
OnSuccess="function() { alert('success'); }" 
0

FormCollection tiene una carpeta por defecto asociada a ella que siempre inicializa la colección y nunca debe obtener nula. Es más probable que tenga una colección vacía cuando usa Ajax.ActionLink en contraste con cuando usa un botón de envío de formulario . Esto se debe a que el método ActionLink no PUBLICA ningún valor de formulario cuando realiza la solicitud AJAX . This post is the unswer to you question

4

estoy aprendiendo ASP.MVC en este momento y que tenían ese problema con mi Ajax.ActionLink, tengo un método GET y no un método POST, ya que debe había sido. Entonces me di cuenta de que yo no añadir los scripts de referencia de la biblioteca:

<script src=”/Scripts/MicrosoftAjax.js” type=”text/javascript”></script> 
<script src=”/Scripts/MicrosoftMvcAjax.js” type=”text/javascript”></script> 

Después de que la adición de la secuencia de comandos que funcionaba bien!

+2

Estos son obsoletos en MVC3 y MVC4. Ver: http://stackoverflow.com/a/8784998/210780 – ashes999

0

intento incluyendo

<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> 
+1

¡Bienvenido a Stack Overflow! ¿Podrían explicar por qué esto ayudará? Una gran parte de una buena respuesta no es solo comprender la solución, sino también comprender por qué las cosas fueron un problema. – tmesser

+0

Estos son obsoletos en MVC3 y MVC4. Ver: http://stackoverflow.com/a/8784998/210780 – ashes999

Cuestiones relacionadas