none
Pasar datos de una vista a un ActionResult del controlador RRS feed

  • Pregunta

  • Buenas tardes,

    Os quiero hacer una consulta que será sencilla para vosotros, yo acabo de empezar con MVC y estoy hecho un lío...

    ¿Cómo puedo pasar los datos de un formulario al ActionResult de mi controlador?

    Os indico como llevo el código para este asunto y si me dais sugerencias para cambiarlo pues son también bienvenidas:

    Este es mi controlador:

    public ActionResult Login() { return View(); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult Login(Usuario usu) { if (ModelState.IsValid) { DatabaseController dbController = new DatabaseController(); dbController.comprobarLogin(usu.nickUsuario, usu.passwordUsuario); } return View(usu); }

    <!-- Vista -->

    @{ ViewBag.Title = "Login"; Layout = "~/Views/_LayoutNBAManager.cshtml"; } <h2>Accede a la gestión de tu plantilla</h2> @using (Html.BeginForm("Login", "Usuario", FormMethod.Post)) { @Html.AntiForgeryToken() // Para prevenir ataques al formulario @Html.ValidationSummary(true) if (@ViewBag.Message != null) { <div style="border:1px solid red;"> @ViewBag.Message </div> } <tr> <!--<td>Nick:</td>--> <td>@Html.LabelFor(model => model.nickUsuario)</td> <td>@Html.TextBoxFor(model => model.nickUsuario)</td> <td>@Html.ValidationMessageFor(model => model.nickUsuario)</td> </tr> <tr> <td>@Html.LabelFor(model => model.passwordUsuario)</td> <td>@Html.TextBoxFor(model => model.passwordUsuario)</td> <td>@Html.ValidationMessageFor(model => model.passwordUsuario)</td> </tr> <tr> <td>&nbsp;</td> <td>&nbsp;</td> <td><input type="submit" value="Login" /></td> </tr> }

    EDIT: Lo que quiero hacer es pasar los datos de la vista al POST del método Login

    jueves, 11 de febrero de 2016 11:45

Respuestas

  • el problema es que debes deifnir propiedades, no variables publicas

    public class Usuario
    {
    	public Usuario(){}
    
    	//Constructor para el login
    	public Usuario(string nick, string password)
    	{
    		this.nickUsuario = nick;
    		this.passwordUsuario = password;
    	}
    	
    	public string nickUsuario {get;set;}
    	public string passwordUsuario{get;set;}
    	
    	public List<JugadorNBA> misJugadores;
    	public string nombreMiEquipo;
    	public int puntuacionSemanal;
    	public int puntuacionTotal;
    	public RolUsuario rolUsuario;
    
    	public string miEquipoFavoritoNBA;
    	public int equipoNBASeleccionado;
    	public IEnumerable<string> equiposNBA;
    
    }

    alli marco en negrita como deberias definirlo para que funcione

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Propuesto como respuesta Asier Villanueva jueves, 11 de febrero de 2016 14:25
    • Marcado como respuesta JM de la Cruz jueves, 11 de febrero de 2016 14:48
    jueves, 11 de febrero de 2016 13:53
  • Hola José Manuel de la Cruz,

    Para redireccionar a otro Action puedes hacer lo siguiente:

    return RedirectToAction("Action", "Controller");

    • Marcado como respuesta JM de la Cruz jueves, 11 de febrero de 2016 16:11
    jueves, 11 de febrero de 2016 15:52

Todas las respuestas

  • A primera vista no veo nada incorrecto. ¿No te envía la información?


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    jueves, 11 de febrero de 2016 12:19
  • A primera vista no veo nada incorrecto. ¿No te envía la información?

    Buenas Asier, gracias por la rápida respuesta.

    No me llega nada al método POST, con un breakpoint dentro del método puedo ver que los valores nick y password están a null.

    Saludos


    José Manuel de la Cruz

    jueves, 11 de febrero de 2016 12:34
  • >>No me llega nada al método POST, con un breakpoint dentro del método puedo ver que los valores nick y password están a null.

    La clase Usuario define las propiedades de nombre nickUsuario y passwordUsuario ?

    Que model usas en la vista que nos muestras en el codigo?, porque deberia ser la clase Usuario

    la idea es que las propiedades de los TextBoxFor coincidan con las propiedades de la clase que usas como parametro del action

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 11 de febrero de 2016 13:03
  • Buenas Leandro,

    Sí, estoy usando del model Usuario en la vista:

    @model NBAManagerJMdelaCruz.Models.Usuario

    Y esta es parte de mi modelo:

        public class Usuario
        {
            public string nickUsuario;
            public string passwordUsuario;
            public List<JugadorNBA> misJugadores;
            public string nombreMiEquipo;
            public int puntuacionSemanal;
            public int puntuacionTotal;
            public RolUsuario rolUsuario;
    
            public string miEquipoFavoritoNBA;
            public int equipoNBASeleccionado;
            public IEnumerable<string> equiposNBA;
    
            public Usuario(){}
    
            //Constructor para el login
            public Usuario(string nick, string password)
            {
                this.nickUsuario = nick;
                this.passwordUsuario = password;
            }

    La verdad es que no tengo ni idea de qué me puede fallar aquí...

    Gracias!


    José Manuel de la Cruz

    jueves, 11 de febrero de 2016 13:14
  • el problema es que debes deifnir propiedades, no variables publicas

    public class Usuario
    {
    	public Usuario(){}
    
    	//Constructor para el login
    	public Usuario(string nick, string password)
    	{
    		this.nickUsuario = nick;
    		this.passwordUsuario = password;
    	}
    	
    	public string nickUsuario {get;set;}
    	public string passwordUsuario{get;set;}
    	
    	public List<JugadorNBA> misJugadores;
    	public string nombreMiEquipo;
    	public int puntuacionSemanal;
    	public int puntuacionTotal;
    	public RolUsuario rolUsuario;
    
    	public string miEquipoFavoritoNBA;
    	public int equipoNBASeleccionado;
    	public IEnumerable<string> equiposNBA;
    
    }

    alli marco en negrita como deberias definirlo para que funcione

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Propuesto como respuesta Asier Villanueva jueves, 11 de febrero de 2016 14:25
    • Marcado como respuesta JM de la Cruz jueves, 11 de febrero de 2016 14:48
    jueves, 11 de febrero de 2016 13:53
  • Madre mía, qué fallo...

    Muchas gracias a los 2, ni había caído en algo tan tonto como esto, no se debe programar en dos lenguajes a la vez porque ocurren estas cosas...

    Saludos!


    José Manuel de la Cruz


    jueves, 11 de febrero de 2016 14:49
  • Hola de nuevo, 

    Aunque no sé si lo leeréis, escribo aquí porque me parece una tontería abrir otro hilo para esto:

    Esto sé que no funciona pero, ¿qué habría que hacer para hacer lo que intento mostraros?

    Osea, que si el usuario se loguea le redireccione a x sitio,

    ¿El Response.Redirect no sirve en MVC?

            public ActionResult Login(Usuario usu)
            {
                if (ModelState.IsValid)
                {
                    DatabaseController dbController = new DatabaseController();
                    bool isLogged = dbController.comprobarLogin(usu.nickUsuario, usu.passwordUsuario);
                    if (isLogged)
                    {
                        Response.Redirect("/Juego/Inicio");
                    }
                    else
                    {
    
                    }
    
                }
    
                return View(usu);
            }

    Saludos!


    José Manuel de la Cruz

    jueves, 11 de febrero de 2016 15:47
  • Hola José Manuel de la Cruz,

    Para redireccionar a otro Action puedes hacer lo siguiente:

    return RedirectToAction("Action", "Controller");

    • Marcado como respuesta JM de la Cruz jueves, 11 de febrero de 2016 16:11
    jueves, 11 de febrero de 2016 15:52
  • Gracias Willams ! 

    José Manuel de la Cruz

    jueves, 11 de febrero de 2016 16:12