public ActionResult Login(string txtLogin, string txtPassword)
        {
            SecurityServices serv = new SecurityServices();
              Usuario user;
              ActionResult result = new EmptyResult();

              try
              {
            user = serv.Login(txtLogin, txtPassword);
            if (user != null)
            {
              //  Opcion 1: terminamos aca y no pedimos perfil
              //  result = View("LoginOK", user);

              //  TODO acomodar autenticacion para que no se repita el codigo

              //  Opcion 2: redirigimos a otra vista que nos permite elegir el perfil (salvo que tenga un unico perfil...)
              if (user.Perfiles.Count > 1)
              {
            result = View("PerfilSelect", user);
              }
              else
              {
            //  Guardamos los datos de sesion en el "contexto" de la sesion establecida (similar al Context que usamos en WPF)
            //
            Session["SESION_USER"] = serv.CrearSesion(user, user.Perfiles.Single());

            FormsAuthentication.SetAuthCookie(user.Login, false);

            string redirectUrl = FormsAuthentication.GetRedirectUrl(user.Login, false);

            if (redirectUrl == "/" || string.IsNullOrEmpty(redirectUrl))
            {
              //  creamos una nueva vista strong-typed para incorporar la Sesion
              result = View("LoginOK_v2", Session["SESION_USER"] as Sesion);
            }
            else
            {
              result = new RedirectResult(redirectUrl);
            }
              }
            }
            else
            {
              //  TODO: armar paginas de error para los casos de credenciales incorrectas o excepcion
              //  TODO: y un controlador que ademas realice el log del problema?
              //
              result = new HttpUnauthorizedResult("Credenciales incorrectas");
            }
              }
              catch (Exception ex)
              {
            //  redireccionar a una pagina de error!!
            result = new HttpUnauthorizedResult("Estas al horno!!!");
              }
              return result;
        }
        public LoginViewModel(Action<ActionRequest> notify)
        {
            _notify = notify ?? delegate(ActionRequest r) { };

              ComandoIngresar = new ComandoSimple(() =>
              {
            Debug.WriteLine("Llamar a Login Usuario {0} , Pass: {1}", Login, Password);

            SecurityServices srv = new SecurityServices();

            try
            {
              if ((Usuario = srv.Login(Login, Password)) != null)
              {
            Perfiles = new ObservableCollection<Perfil>(Usuario.Perfiles);
            PerfilSeleccionado = Perfiles[0];

            _notify(ActionRequest.CloseOK);
              }
            }
            catch (OMBSecurityException ex)
            {
              OnLoginError(ex.Message);
            }
              }, IsValid);

              ComandoIngresarPerfil = new ComandoSimple(() =>
              {
            SecurityServices srv = new SecurityServices();

            srv.CrearSesion(Usuario, PerfilSeleccionado);

            Debug.WriteLine("Perfil Seleccionado: {0}", (object)_perfil.Descripcion);

            _notify(ActionRequest.CloseOK);
              });

              ComandoCancelar = new ComandoSimple(() => _notify(ActionRequest.CloseCancel));

              PerfilSeleccionado = null;
        }