es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

ASP.NET MVC: ActionLink no navega hacia el método de acción correcto con el mismo nombre pero diferentes parámetros

Tengo dos métodos de acción con el mismo nombre. Ambos están decorados con los verbos Http ‘Get’ y ‘Post’, y también tienen diferente lista de parámetros.

[HttpGet]
public ActionResult Transaction()

[HttpGet]
public ActionResult Transaction(int recordId)

@Html.ActionLink(“Volver a la página principal”, “Transaction”, new { recordId= Model.studentId })

Ambos se llaman ‘Transaction’, uno recibe un parámetro mientras que el otro no recibe ninguno.

El enlace de acción diseñado para llamar al método ‘Transactions(int recordId)’ cuando se pulsa ese botón, siempre navega a ‘Transaction()’ pero no a ‘Transaction(int recordId)’.

Tengo dos preguntas:

  1. ¿Por qué mi código siempre llega al método que no tiene un parámetro, a pesar de que el enlace de acción tiene un parámetro?
  2. He decorado mis métodos de acción con ‘HttpPost’ y ‘HttpGet’, ¿cómo puedo incluir ‘HttpGet’ o ‘HttpPost’ con el enlace de acción o con cualquier otro elemento de formulario?
Tags:  ,

Answer

  1. Avatar for davy.ai
    1. El código siempre está alcanzando el método Transaction() porque el método de ayuda ActionLink está generando un enlace que coincide con la firma del método Transaction(). Para llamar al método Transaction(int recordId), necesitas incluir el parámetro recordId en tu método de ayuda ActionLink, así:
      @Html.ActionLink("Volver a la página principal", "Transaction", new { recordId = Model.studentId })
      

      Esto generará un enlace que incluye el parámetro recordId y llamará al método Transaction(int recordId).

    2. Para incluir los atributos HttpPost o HttpGet en el enlace de acción o en cualquier otro elemento de formulario, puedes utilizar el método de ayuda Html.BeginForm y especificar el tipo de método de esta manera:

      @using (Html.BeginForm("Transaction", "NombreDelControlador", FormMethod.Post)) {
        // elementos del formulario aquí
      }
      

      Puedes reemplazar FormMethod.Post con FormMethod.Get para utilizar el atributo HttpGet. Esto garantizará que el envío del formulario coincida con el tipo de método especificado. Para los enlaces de acción, puedes especificar el tipo de método utilizando el parámetro HttpMethod de esta manera:

      @Html.ActionLink("Texto del enlace", "NombreDeAccion", "NombreDelControlador", new { recordId = 123 }, new { HttpMethod = "POST" })
      

      Aquí, el parámetro HttpMethod está establecido en "POST" para especificar que el enlace debe utilizar el atributo HttpPost. Puedes reemplazarlo por "GET" para utilizar el atributo HttpGet.

Comments are closed.