2011-08-03 11 views
6

Lo que estoy tratando de hacer: Trate de eliminar un registro utilizando una "correcta" HTTP Delete.Problemas al hacer un HTTP Delete correcto con Ajax.ActionLink

Código de control:

[HttpDelete] 
    public void DeleteRun(int RunId) 
    { 
     repository.RemoveEntry(RunId); 

    } 

Razor Ver:

   @Ajax.ActionLink("Delete","DeleteRun",new {RunId = run.RunId}, 
         new AjaxOptions() { Confirm = "Are you sure you want to delete this entry?", 
              HttpMethod = "DELETE", 
              OnComplete = string.Format("DeleteRunInTable({0})",run.RunId) 

         }) 

Javascript (en el archivo incluido por separado):

function DeleteRunInTable(RunId) { 
     $("tr[data-runid=" + RunId).remove(); 
} 

Enlace el método ActionLink está creando:

<a data-ajax="true" data-ajax-complete="DeleteRunInTable(11)" data-ajax-confirm="Are you sure you want to delete this entry?" data-ajax-method="DELETE" href="/Runs/Delete/11">Delete</a> 

No estoy seguro de si la parte de JavaScript funciona todavía pero no me preocupa. Intentando dar un paso a la vez :). Ahora solo funciona como una etiqueta tradicional y cuando hago clic en el enlace solo hace una solicitud GET del href. Por supuesto, recibo un error 404 debido a [HTTPDelete] que puse en mi controlador. Soy bastante nuevo en el desarrollo web, así que estoy seguro de que hay otras formas en javascript o jquery para hacer lo mismo, pero estoy haciendo lo que sé en este momento.

Respuesta

9

Esto debería funcionar como lo he hecho recientemente y todo lo que tenía que hacer era especificar el HttpMethod en el argumento AjaxOptions.

También debe asegurarse de tener el script jquery.unobtrusive-ajax.js incluido en la página.

+0

Gracias por la respuesta ... En realidad, los eliminé. Pensé que no los necesitaban. Pensé que ajax.actionlink usaría jquery. ¿Me equivoco? Si recuerdo correctamente en pluralsight, estaba viendo uno de los videos con K Scott Allen y él eliminó los dos scripts microshotsoft ajax cuando estaba usando ajax.actionslink. Soy bastante novato en esto, así que tal vez actionlink utiliza scripts de Microsoft Ajax en ciertos casos y en otros casos no. No estoy seguro :) – coding4fun

+0

Gracias fue mi culpa. Los scripts de microsoft ajax donde no es necesario aparecen. Extrañé un script en la página del que no tenía conocimiento: jquery.unobtrusive-ajax.min.js. Probablemente mi próxima pregunta aquí sea si hay una buena manera de saber cuándo falta una secuencia de comandos de la página en lugar de solo (no funciona): P. – coding4fun

+0

ahh genial, tenía la sensación de que era un guión perdido ... simplemente no era el correcto :) He actualizado mi respuesta para reflejar el guión correcto en caso de que los futuros usuarios tengan el mismo problema y no lean el comentarios – lomaxx

4

En realidad era una solución simple ... me faltaba el jquery.unobtrusive-ajax.min.js: P. Dejo la publicación aquí para que cualquiera que intente hacer algo similar a lo que estoy haciendo sabrá que es posible, solo asegúrate de incluir jquery & jquery.unobtrusive.

Editar: Para aclarar, ActionLink funciona con JQuery si usa MVC3, de lo contrario, utiliza las bibliotecas de microsoft javascript.

Cuestiones relacionadas