A menudo necesitamos enviar datos ya sea entre un controlador a una vista pero en otras ocasiones qué sucede si deseamos que la vista envíe un dato al controlador?? bueno eso me sucedió en un proyecto que estaba desarrollando y opté por hacerlo con ASP Web Forms pero 1 mes después se me presentó la misma situación por lo que me di la tarea de buscar la solución a esto y acá les comparto el código.
Primero para poder comunicarnos con el método de un controlador podemos utilizar Html.ActionLink; HTML es una clase que nos permite renderizar componentes HTML y el ActionLink nos permite establecer un link en nuestras páginas web. Entonces vamos a crear un link al método «NuevaVista» del controlador «Home».
controlador
public ActionResult NuevaVista() { return View(); }
*.cshtml
@Html.ActionLink("Título página","NuevaVista","Home")
Como podemos ver estamos enviando 3 parámetros:
- Texto a desplegar.
- Nombre método.
- Controlador.
El ActionLink cuenta con varias sobrecargas y para poder enviar datos entre la vista y el controlador podemos utilizar una de éstas.
Primero definiremos nuestro método en el controlador que recibirá un string con un nombre (el nombre del parámetro debe coincidir con alguno de los que se envíen por ActionLink).
public ActionResult NuevaVista(string pNombre) { string guardarNombre = pNombre; return View(); }
Seguidamente en nuestra vista .cshtml vamos a crear un ActionLink que envíe un dato.
@Html.ActionLink("Título página","NuevaVista","Home",new {pNombre = "Carlos"},null)
Como podemos observar estamos enviando en esta ocasión 5 parámetros:
- Texto a desplegar.
- Nombre método.
- Controlador.
- Objeto que se envía por parámetro (los nombres deben coincidir tanto en la vista como en el método).
- Atributos html (clases, id, entre otros).
Cuando se de click en el link que creamos se enviará al método un valor (Carlos) y podemos utilizar la variable guardarNombre/pNombre ya que es la que almacena el valor enviado.
Bueno eso ha sido todo espero que les sea de ayuda 🙂