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:
- ¿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?
- 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?
davy.ai
Transaction()
porque el método de ayudaActionLink
está generando un enlace que coincide con la firma del métodoTransaction()
. Para llamar al métodoTransaction(int recordId)
, necesitas incluir el parámetrorecordId
en tu método de ayudaActionLink
, así:Esto generará un enlace que incluye el parámetro
recordId
y llamará al métodoTransaction(int recordId)
.Para incluir los atributos
HttpPost
oHttpGet
en el enlace de acción o en cualquier otro elemento de formulario, puedes utilizar el método de ayudaHtml.BeginForm
y especificar el tipo de método de esta manera:Puedes reemplazar
FormMethod.Post
conFormMethod.Get
para utilizar el atributoHttpGet
. 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ámetroHttpMethod
de esta manera:Aquí, el parámetro
HttpMethod
está establecido en"POST"
para especificar que el enlace debe utilizar el atributoHttpPost
. Puedes reemplazarlo por"GET"
para utilizar el atributoHttpGet
.