none
No valida mi confirmación de contraseña ni el numero de caracteres mvc4 RRS feed

  • Pregunta

  • Hola, no se por que no me envía el mensaje "La contraseña y la contraseña de confirmación no coinciden." cuando creo un usuario y le asigno una contraseña y la confirmo y me la deja guardar así la confirmación no sea la misma, y lo tengo parametrizado a mas de 6 caracteres para la contraseña y me recibe desde 1 carácter.. no restringe nada. "El número de caracteres de {0} debe ser al menos {2}.", MinimumLength = 6).. no se que tengo mal.. ayuda

    Desde models

      public class RegisterModel
        {
            [Required]
            [Display(Name = "Nombre de usuario")]
            public string UserName { get; set; }

            [Required]
            [StringLength(100, ErrorMessage = "El número de caracteres de {0} debe ser al menos {2}.", MinimumLength = 6)]
            [DataType(DataType.Password)]
            [Display(Name = "Contraseña")]
            public string Password { get; set; }

            [DataType(DataType.Password)]
            [Display(Name = "Confirmar contraseña")]
            [Compare("Password", ErrorMessage = "La contraseña y la contraseña de confirmación no coinciden.")]
            public string ConfirmPassword { get; set; }
        }

    }

    y el controlador

     [AllowAnonymous]
            public ActionResult Register()
            {
                var empleado = from p in bd.GN_Persona
                               where p.TipoPersona == "3" && p.ST_Estado_CodigoEstado == "801" 
                                  select new
                                  {
                                      Id = p.CodigoPersona,
                                      Name = p.CodigoPersona + " - " + p.NombrePersona + "  " + p.PrimerApellido
                                  };


                ViewBag.codigoPersona = new SelectList(empleado, "Id", "Name");
                return View();
            }

            /// <summary>
            /// 
            /// </summary>
            /// <param name="profile"></param>
            /// <returns></returns>

            [HttpPost]
            [ValidateAntiForgeryToken]
            public ActionResult Register(FormCollection profile, FormCollection autorizacion)
            {
                var model = new RegisterModel();
                 model.UserName = profile["UserName"];
                 model.Password=profile["Password"];
                 model.ConfirmPassword = profile["ConfirmPassword"];
                 var empleado = profile["codigoPersona"];

                if (ModelState.IsValid)
                {
                    // Intento de registrar al usuario
                    try
                    {
                        WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new {CodigoPersona=empleado });
                        return RedirectToAction("Index", "Home");
                    }
                    catch (MembershipCreateUserException e)
                    {
                        ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
                    }
                }

                // Si llegamos a este punto, es que se ha producido un error y volvemos a mostrar el formulario
                return View(model);
            }


    erikpugo

    miércoles, 11 de marzo de 2015 15:17

Respuestas

  • hola

    cuando pasa por aqui

    if (ModelState.IsValid)

    puedes notar que la validacion es false ?

    ----

    porque lo que noto es que aqui

    public ActionResult Register(FormCollection profile, FormCollection autorizacion)

    deberias definir la clase del modelo

    public ActionResult Register(RegisterModel model)

    para que haya un model que validar

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Erik Puentes viernes, 13 de marzo de 2015 14:23
    miércoles, 11 de marzo de 2015 16:00
  • No mira mi vista.. esta bien.. eso creo?

    @model SifActivoFijo.Models.RegisterModel
    @{
        ViewBag.Title = "Registrarse";
    }


    @using (Html.BeginForm())
    {
        @Html.AntiForgeryToken()
        @Html.ValidationSummary()
        <fieldset>
            <legend id="newLegend">Nuevo Usuario</legend>
            <div class="separadores">
                <div class="flota">
                    <div class="editor-label">
                        <label>Empleado:</label>
                    </div>
                    <div class="editor-field">
                        @Html.DropDownList("codigoPersona", null, "Seleccione", new { @class = "dropdown" })
                    </div>
                </div>
                <div class="flota">
                    <div class="editor-label">
                        @Html.LabelFor(m => m.UserName)
                    </div>
                    <div class="editor-field">
                        @Html.TextBoxFor(m => m.UserName)
                    </div>
                </div>
            </div>
            <div class="separadores">
                <div class="flota">
                    <div class="editor-label">
                        @Html.LabelFor(m => m.Password)
                    </div>
                    <div class="editor-field">
                        @Html.PasswordFor(m => m.Password)
                    </div>
                </div>
                <div class="flota">
                    <div class="editor-label">
                        @Html.LabelFor(m => m.ConfirmPassword)
                    </div>
                    <div class="editor-field">
                        @Html.PasswordFor(m => m.ConfirmPassword)
                    </div>
                </div>
            </div>
            <div class="opciones">
                <input type="submit" value="Registrarse" />
            </div>
        </fieldset>
    }

    @section Scripts {
        @Scripts.Render("~/bundles/jqueryval")
    }


    erikpugo

    • Marcado como respuesta Erik Puentes miércoles, 8 de abril de 2015 14:38
    miércoles, 11 de marzo de 2015 15:36

Todas las respuestas

  • ¿Puede ser que en la Vista hayas puesto simples campos <input> en lugar de @Html.EditorFor(...)?
    miércoles, 11 de marzo de 2015 15:20
  • No mira mi vista.. esta bien.. eso creo?

    @model SifActivoFijo.Models.RegisterModel
    @{
        ViewBag.Title = "Registrarse";
    }


    @using (Html.BeginForm())
    {
        @Html.AntiForgeryToken()
        @Html.ValidationSummary()
        <fieldset>
            <legend id="newLegend">Nuevo Usuario</legend>
            <div class="separadores">
                <div class="flota">
                    <div class="editor-label">
                        <label>Empleado:</label>
                    </div>
                    <div class="editor-field">
                        @Html.DropDownList("codigoPersona", null, "Seleccione", new { @class = "dropdown" })
                    </div>
                </div>
                <div class="flota">
                    <div class="editor-label">
                        @Html.LabelFor(m => m.UserName)
                    </div>
                    <div class="editor-field">
                        @Html.TextBoxFor(m => m.UserName)
                    </div>
                </div>
            </div>
            <div class="separadores">
                <div class="flota">
                    <div class="editor-label">
                        @Html.LabelFor(m => m.Password)
                    </div>
                    <div class="editor-field">
                        @Html.PasswordFor(m => m.Password)
                    </div>
                </div>
                <div class="flota">
                    <div class="editor-label">
                        @Html.LabelFor(m => m.ConfirmPassword)
                    </div>
                    <div class="editor-field">
                        @Html.PasswordFor(m => m.ConfirmPassword)
                    </div>
                </div>
            </div>
            <div class="opciones">
                <input type="submit" value="Registrarse" />
            </div>
        </fieldset>
    }

    @section Scripts {
        @Scripts.Render("~/bundles/jqueryval")
    }


    erikpugo

    • Marcado como respuesta Erik Puentes miércoles, 8 de abril de 2015 14:38
    miércoles, 11 de marzo de 2015 15:36
  • Echo a faltar en la vista los @Html.ValidationMessageFor, que precisamente son los que presentan esos mensajes de error que no te están saliendo.
    miércoles, 11 de marzo de 2015 15:49
  • hola

    cuando pasa por aqui

    if (ModelState.IsValid)

    puedes notar que la validacion es false ?

    ----

    porque lo que noto es que aqui

    public ActionResult Register(FormCollection profile, FormCollection autorizacion)

    deberias definir la clase del modelo

    public ActionResult Register(RegisterModel model)

    para que haya un model que validar

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Erik Puentes viernes, 13 de marzo de 2015 14:23
    miércoles, 11 de marzo de 2015 16:00