none
No se puede convertir un objeto de tipo 'System.Int32' al tipo 'System.String'. RRS feed

  • Pregunta

  • Hola,

    Estoy trabajando en una aplicacion en ASP.NET MVC 5 y estoy usando el sistema de autenticación que se incluye al crear un nuevo proyecto. 

    Estuve agregando nuevas propiedades a la tabla de AspNetUsers como el nombre, apellidos, ciudad, etc. Durante un tiempo me estuvo registrando normalmente pero ahora me sale este error cuando envio el registro. (Aunque se especifica que el error es por la conversion de datos, no encuentro donde se origina realmente el error en el codigo)

    Este es el modelo de la vista

    public class RegisterViewModel
        {
            [Required]
            [EmailAddress]        
            [Display(Name = "Correo electrónico")]
            public string Email { 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 = "Las contraseñas no coinciden.")]
            public string ConfirmPassword { get; set; }
    
            [Required]
            [StringLength(50)]
            public string Nombre { get; set; }
    
            [Required]
            [StringLength(50)]
            public string Apellido1 { get; set; }
    
            [Required]
            [StringLength(50)]
            public string Apellido2 { get; set; }
    
            [Required]
            [StringLength(50)]
            public int Departamentos_IDDepartamento { get; set; }
    
            [Required]
            [StringLength(50)]        
            public int Ciudades_IDCiudad { get; set; }
        }

    El metodo de REgister en el controlador Account

    [HttpPost]
            [AllowAnonymous]
            [ValidateAntiForgeryToken]
            public async Task<ActionResult> Register(RegisterViewModel model)
            {
                if (ModelState.IsValid)
                {
                    var user = new ApplicationUser { UserName = model.Email, Email = model.Email, Nombre = model.Nombre, Apellido1 = model.Apellido1, Apellido2 = model.Apellido2, Departamentos_IDDepartamento = model.Departamentos_IDDepartamento, Ciudades_IDCiudad = model.Ciudades_IDCiudad};
                    var result = await UserManager.CreateAsync(user, model.Password);
                    //if (btnConsultar!=0) { }
    
    
                    if (result.Succeeded)
                    {
                        await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
                        
                        // Para obtener más información sobre cómo habilitar la confirmación de cuenta y el restablecimiento de contraseña, visite http://go.microsoft.com/fwlink/?LinkID=320771
                        // Enviar correo electrónico con este vínculo
                        // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
                        // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                        // await UserManager.SendEmailAsync(user.Id, "Confirmar cuenta", "Para confirmar la cuenta, haga clic <a href=\"" + callbackUrl + "\">aquí</a>");
    
                        return RedirectToAction("Index", "Home");
                    }
                    AddErrors(result);
                }
    
                // Si llegamos a este punto, es que se ha producido un error y volvemos a mostrar el formulario
                return View(model);
            }

    Esta es la definicion de la tabla en la base de datos

    Y la vista del Registrar

    @using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
    {
        @Html.AntiForgeryToken()
        <h4>Cree una cuenta nueva.</h4>
        <hr />
        @Html.ValidationSummary("", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.Nombre, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-4">
                @Html.EditorFor(model => model.Nombre, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Nombre, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.Apellido1, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-4">
                @Html.EditorFor(model => model.Apellido1, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Apellido1, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.Apellido2, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-4">
                @Html.EditorFor(model => model.Apellido2, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Apellido2, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
                @Html.Label("Email", new { @class = "col-md-2 control-label" })
                <div class="col-md-4">
                    @Html.TextBoxFor(m => m.Email, new { @class = "form-control", placeholder = "ejemplo@correo.com" })
                </div>
            </div>
        <div class="form-group">
            @Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" })
            <div class="col-md-4">
                @Html.PasswordFor(m => m.Password, new { @class = "form-control" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.ConfirmPassword, new { @class = "col-md-2 control-label" })
            <div class="col-md-4">
                @Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.Departamentos_IDDepartamento, new { @class = "col-md-2 control-label" })
            <div class="col-md-4">
                @Html.TextBoxFor(m => m.Departamentos_IDDepartamento, new { @class = "form-control" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.Ciudades_IDCiudad, new { @class = "col-md-2 control-label" })
            <div class="col-md-4">
                @Html.TextBoxFor(m => m.Ciudades_IDCiudad, new { @class = "form-control" })
            </div>
        </div>    
        <div class="form-group">
            <div class="col-md-offset-2 col-md-4">
                <input type="submit" class="advanced2 text-center text-uppercase border_radius" value="Registrarse" />
            </div>
        </div>
    }
    Espero me puedan ayuda, muchas gracias.


    • Editado MateoM9 lunes, 12 de marzo de 2018 23:35 Parte del codigo innecesaria
    lunes, 12 de marzo de 2018 23:30

Respuestas

  • Cuando muestre errores, nunca corte el seguimiento de pila.  Es muy importante y útil.

    En fin, diría que su error está en tratar de ajustar la cantidad de dígitos de las siguientes dos propiedades (que son de tipo int) como si fueran cadenas de texto usando el atributo StringLength.

            [Required]
            [StringLength(50)]
            public int Departamentos_IDDepartamento { get; set; }
    
            [Required]
            [StringLength(50)]        
            public int Ciudades_IDCiudad { get; set; }


    Jose R. MCP
    Code Samples

    • Marcado como respuesta MateoM9 martes, 13 de marzo de 2018 0:23
    lunes, 12 de marzo de 2018 23:41

Todas las respuestas

  • Cuando muestre errores, nunca corte el seguimiento de pila.  Es muy importante y útil.

    En fin, diría que su error está en tratar de ajustar la cantidad de dígitos de las siguientes dos propiedades (que son de tipo int) como si fueran cadenas de texto usando el atributo StringLength.

            [Required]
            [StringLength(50)]
            public int Departamentos_IDDepartamento { get; set; }
    
            [Required]
            [StringLength(50)]        
            public int Ciudades_IDCiudad { get; set; }


    Jose R. MCP
    Code Samples

    • Marcado como respuesta MateoM9 martes, 13 de marzo de 2018 0:23
    lunes, 12 de marzo de 2018 23:41
  • Cuando muestre errores, nunca corte el seguimiento de pila.  Es muy importante y útil.

    Lo tendré encuenta para la proxima.

    Mil gracias amigo, me funcionó.

    martes, 13 de marzo de 2018 0:26