2011-06-01 15 views

Respuesta

7

Sí, es posible. Sólo tiene que utilizar ActionName atributo en una acción:

 public ActionResult Delete(int id) 
     { 
      //... 
      return View(); 
     } 

     [HttpPost] 
     [ActionName("Delete")] 
     public ActionResult Delete_Post(int id) 
     { 
      //... 
      return View(); 
     } 
+0

Gracias, no entendí por qué esto fue rechazado inicialmente, ya que es una pregunta muy válida. He leído que algunas personas recomiendan que debe pasar un parámetro aleatorio o FormCollection, pero eso parece exagerado. Esto suena como una mejor manera de hacerlo. ¡Muy apreciado! –

+0

solo una pregunta ... ¿por qué mvc no permite 2 acciones con la misma firma? Creo que es porque el controlador no sabría a qué acción llamar, pero seguramente con el HttpPost esto no sería un problema. –

+1

Esto no está relacionado con MVC. Según la especificación C#, la firma de un método debe ser única en una clase en la que se declara. Si lo piensas, si no hay atributos, ¿cómo los distinguirías? – frennky

1

La razón se obtiene el error que no está permitido es porque C# sí se confunde. Mientras estés en MVC puedes agregar atributos para especificar si una función es HttpGet o HttpPost, eso no ayuda a C# a determinar la diferencia entre uno u otro. Para tener 2 funciones con exactamente el mismo nombre, la lista de parámetros debe ser diferente.

Como frennky señaló, el atributo ActionName funciona en MVC porque MVC usa alias como parte del proceso para determinar qué acción llamar (junto con los atributos, pero no los parámetros).

Como nota al margen, es mejor no tener una acción Eliminar en una solicitud GET. Usted no quiere que un rastreador u otro bot accidentalmente golpee el enlace equivocado: P

Cuestiones relacionadas