public ActionResult CrearEditarUsuario(int?IdUsuario)
        {
            CrearEditarUsuarioViewModel Model = new CrearEditarUsuarioViewModel();

            Model.TiposUsuario = db.TipoUsuarios.OrderBy(x => x.TipoUsuario1);
            if (IdUsuario.HasValue)
            {
                Model.Form.CreacionUsuario = false;
                Usuario user = db.Usuarios.Single(x => x.IdUsuario == IdUsuario.Value);
                Mapper.Map <Usuario, CrearEditarUsuarioFormModel>(user, Model.Form);
                Model.Form.IdTipoUsuario = user.IdTipoUsuario.GetValueOrDefault(1);
            }
            return(View(Model));
        }
        //[ValidateAntiForgeryToken]
        public async Task <ActionResult> CrearEditarUsuario(CrearEditarUsuarioFormModel Form)
        {
            if (ModelState.IsValid)
            {
                if (Form.IdUsuario.HasValue)
                {
                    Usuario _user = db.Usuarios.Single(x => x.IdUsuario == Form.IdUsuario);
                    int     AntigupoTipoUsuario = _user.IdTipoUsuario.Value;
                    _user.Nombre          = Form.Nombre;
                    _user.ApellidoPaterno = Form.ApellidoPaterno;
                    _user.IdTipoUsuario   = Form.IdTipoUsuario;

                    if (AntigupoTipoUsuario != Form.IdTipoUsuario)
                    {
                        var user  = UserManager.FindByName(_user.NombreUsuario);
                        var roles = UserManager.GetRoles(user.Id);

                        foreach (var rol in db.TipoUsuarioPermisos.Where(x => x.IdTipoUsuario == AntigupoTipoUsuario).Select(x => x.Permiso.Permiso1))
                        {
                            UserManager.RemoveFromRole(user.Id, rol);
                        }

                        foreach (var permiso in _user.TipoUsuario.TipoUsuarioPermisos.Select(x => x.Permiso.Permiso1))
                        {
                            var roleresult = UserManager.AddToRole(user.Id, permiso);
                        }
                    }

                    db.SubmitChanges();
                    Mensaje = "El usuario fue editado exitosamente";
                    return(RedirectToAction("ListarUsuario"));
                }
                else
                {
                    string Password = Form.Rut.Numero.ToString().Substring(0, 6);
                    var    user     = new ApplicationUser {
                        UserName = Form.Correo, Email = Form.Correo
                    };
                    var result = await UserManager.CreateAsync(user, Password);

                    if (result.Succeeded)
                    {
                        foreach (var permiso in db.TipoUsuarioPermisos.Where(x => x.IdTipoUsuario == Form.IdTipoUsuario).Select(x => x.Permiso.Permiso1))
                        {
                            var roleresult = UserManager.AddToRole(user.Id, permiso);
                        }

                        //await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
                        Usuario _user = new Usuario()
                        {
                            IdTipoUsuario   = Form.IdTipoUsuario,
                            Rut             = Form.Rut.Numero,
                            NombreUsuario   = Form.Correo,
                            Nombre          = Form.Nombre,
                            ApellidoPaterno = Form.ApellidoPaterno,
                        };

                        db.Usuarios.InsertOnSubmit(_user);
                        db.SubmitChanges();
                    }
                    //AddErrors(result);
                    Mensaje = "El Usuario fue creado exitosamente.";
                    return(RedirectToAction("ListarUsuario"));
                }
            }
            CrearEditarUsuarioViewModel Model = new CrearEditarUsuarioViewModel(Form);

            Model.TiposUsuario = db.TipoUsuarios.OrderBy(x => x.TipoUsuario1);
            if (Form.IdUsuario.HasValue)
            {
                Model.Form.CreacionUsuario = false;
            }
            return(View(Model));
        }