none
Modelo siempre regresa nulo al hacer el POST - MVC RRS feed

  • Pregunta

  • Hola a todos,

    Tengo un problema, cuando hago POST en mi action, el UsuarioViewModel siempre llega nulo.

         public class UsuarioController : Controller
        { ....
            [AllowAnonymous]
            public ActionResult ConfirmAccount(string _urlConfirm)
            {
                    //Código....
    
                    UsuarioViewModel uvm = user.getUserById(id);
                    return View(uvm);
            }

    Cuando entra a la vista le envío el modelo, hasta ahí todo bien, pero a la hora de hacer el POST .

            [HttpPost]
            public ActionResult ConfirmAccount(UsuarioViewModel _uvm)  <--Llega nulo aquí
            {
                try
                {
                    _uvm.estado = 1;
                    user.updateUser(_uvm);
    
                    ViewBag.confirm = "success";
                }
                catch (Exception ex)
                {
                    ViewBag.error = ExceptionView.getError(ex);
                }
    
                return View(_uvm);
            }

    La VIEW :

    @model TheStore.Models.ViewModel.UsuarioViewModel
    
    @{
        ViewBag.Title = "Confirm Account";
    }
    
    //Más código...
    
    @using (Html.BeginForm("ConfirmAccount", "Usuario", new { _uvm = Model }, FormMethod.Post, new { }))
    {
        @Html.AntiForgeryToken()
    
    .....
    
         <input type="submit" value="Confirmar e-mail" class="btn btn-success" />
    
    //Más código...
    
    }

    Como pueden ver , le mando al parámetro el Model actual (dónde está los datos del usuario).

    La vista sólo la uso para mostrar los datos de un usuario en específico y mediante el POST hago la confirmación.

    Espero puedan ayudarme.

    Gracias.

    viernes, 19 de agosto de 2016 4:34

Respuestas

  • Recuerda que la vista no "guarda" el model. Solo lo usa para alimentar el código que tú escribas dentro de la vista. En ese código, típicamente se copian los campos desde el modelo hacia los varios INPUT que tienes en la vista. Después, cuando haces el submit, lo que se envía al servidor son los valores de esos INPUT (no el modelo). Y en el servidor, el DafaultBinder intenta tomar esos campos y reconstruir el modelo a partir de ellos, y si lo consigue se lo pasa a tu método de acción. Si no puede construir el modelo porque los campos no traen esa informacion (o sus nombres no coinciden con las propiedades del modelo), entonces no lo recibes.
    • Propuesto como respuesta Sergio ParraModerator viernes, 19 de agosto de 2016 8:56
    • Marcado como respuesta Gladys CM viernes, 19 de agosto de 2016 23:27
    viernes, 19 de agosto de 2016 6:48
  • hola

    llega en nulo porque no defines ninguna <input> que envie datos en el POST

    si defines al menos un

    @Html.HiddenFor(x=>x.mail)

    @Html.HiddenFor(x=>x.usuario)

    @Html.HiddenFor(x=>x.dni)

    dentro del Html.BeginForm entonces al realizarse el post se enviara esto y el model binding lo mapeara a las propiedades del model

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Gladys CM viernes, 19 de agosto de 2016 23:26
    viernes, 19 de agosto de 2016 12:46

Todas las respuestas

  • Recuerda que la vista no "guarda" el model. Solo lo usa para alimentar el código que tú escribas dentro de la vista. En ese código, típicamente se copian los campos desde el modelo hacia los varios INPUT que tienes en la vista. Después, cuando haces el submit, lo que se envía al servidor son los valores de esos INPUT (no el modelo). Y en el servidor, el DafaultBinder intenta tomar esos campos y reconstruir el modelo a partir de ellos, y si lo consigue se lo pasa a tu método de acción. Si no puede construir el modelo porque los campos no traen esa informacion (o sus nombres no coinciden con las propiedades del modelo), entonces no lo recibes.
    • Propuesto como respuesta Sergio ParraModerator viernes, 19 de agosto de 2016 8:56
    • Marcado como respuesta Gladys CM viernes, 19 de agosto de 2016 23:27
    viernes, 19 de agosto de 2016 6:48
  • hola

    llega en nulo porque no defines ninguna <input> que envie datos en el POST

    si defines al menos un

    @Html.HiddenFor(x=>x.mail)

    @Html.HiddenFor(x=>x.usuario)

    @Html.HiddenFor(x=>x.dni)

    dentro del Html.BeginForm entonces al realizarse el post se enviara esto y el model binding lo mapeara a las propiedades del model

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Gladys CM viernes, 19 de agosto de 2016 23:26
    viernes, 19 de agosto de 2016 12:46