2010-09-14 23 views
6

¿Cuál es la mejor manera de eliminar un elemento en MVC? Tengo una lista de elementos. Cada fila contendrá un enlace "Eliminar". Quiero que el enlace Eliminar solicite la confirmación, luego elimine el elemento del almacén de datos y actualice la página con los datos nuevos.¿Cómo elimino el elemento utilizando ASP.Net MVC

Aquí está mi código de la vista:

  <%: Ajax.ActionLink(
       "Delete" 
       ,"Delete" 
       , new { id=item.FooId} 
       , new AjaxOptions() 
       { 
        Confirm="Are you sure that you want to delete this item?" 
        , HttpMethod = "post"}) %> 

Y aquí es mi código del controlador:

[HttpPost] 
    public ActionResult Delete(int id) 
    { 
     try 
     { 
      var success = FooService.Deletefoo(id); 
      return RedirectToAction("Index"); 
     } 
     catch 
     { 
      return View(); 
     } 
    } 

está siendo eliminado el registro, sin embargo, la página no es refrescante. Lo único que se me ocurre es que RedirectToAction solo funciona para diferentes páginas, no en la misma página.

¿Cómo obtengo la página para actualizar?

+1

Nota al margen: no utilice excepciones para controlar el flujo lógico. Es una mala práctica por varias razones. – David

Respuesta

6

Su página no es refrescante porque la llamada AJAX no va a cumplir con un 302 - se usa RedirectToAction() cuando todo el navegador se actualiza. Si va a utilizar AJAX para su enlace de eliminación, eche un vistazo a this post para obtener todos los códigos de ejemplo. Completo, tiene una ventana de JavaScript.location.reload(); para refrescar la página Esto sigue el PRG pattern.

Otro enfoque es el uso para no usar AJAX. Aquí está an example para eso.

En general, está bien apegarse a su enfoque AJAX.

+0

Buena explicación del problema y un enlace a una solución completa. Gracias. – John

0

La otra forma es eliminar ese elemento de control/html a través de javascript. Puede llamar a este script cuando su solicitud de Ajax se complete.

<%: Ajax.ActionLink(
       "Delete" 
       ,"Delete" 
       , new { id=item.FooId} 
       , new AjaxOptions() 
       { 
        OnSuccess="deleteElement" 
        ,Confirm="Are you sure that you want to delete this item?" 
        , HttpMethod = "post"}) %> 

OnSuccess opción le indica al ayudante de Ajax para llamar al método cuando las peticiones ajax se completó con éxito.

Cuestiones relacionadas