Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Autenticação não funciona

Fiz tudo como descrito no vídeo, mas ao tentar logar com uma senha errada, me é apresentado uma página de erro aspx com o seguinte erro:

Erro de Servidor no Aplicativo '/'.
The view 'Autentica' or its master was not found or no view engine supports the searched locations. The following locations were searched:
~/Views/Login/Autentica.aspx
~/Views/Login/Autentica.ascx
~/Views/Shared/Autentica.aspx
~/Views/Shared/Autentica.ascx
~/Views/Login/Autentica.cshtml
~/Views/Login/Autentica.vbhtml
~/Views/Shared/Autentica.cshtml
~/Views/Shared/Autentica.vbhtml

A View existe, os campos estão iguais, o Controller está igual - não consigo localizar o erro.

Controller:

public class LoginController : Controller
    {
        // GET: Login
        public ActionResult Index()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Autentica(String login, String senha)
        {
            UsuariosDAO dao = new UsuariosDAO();
            Usuario usuario = dao.Busca(login, senha);

            if (usuario != null)
            {
                Session["usuarioLogado"] = usuario;
                return RedirectToAction("Index", "Produto");
            }
            else
            {
                RedirectToAction("Index","Login");
            }

            return View();
        }
    }

HTML

<form action="/Login/Autentica" method="post">
    <label for="login">Login: </label>
    <input type="text" name="login" id="login" class="form-control"/>
    <br />
    <label for="senha">Senha: </label>
    <input type="password" name="senha" id="senha" class="form-control"/>
    <br />
    <input type="submit" value="Autenticar" />
</form>
3 respostas

Olá, Renan!

Dentro do seu método Autentica você está retornando uma View na seguinte linha:

return View();

O problema é que, quando você retorna uma View (sem parâmetros) numa action, o MVC procura uma view com o mesmo nome da action.

O que percebi também é que seu código está diferente do código da aula, que não tem essa linha retornando uma View:

public ActionResult Autentica(String login, String senha)
{
   UsuariosDAO dao = new UsuariosDAO();
   Usuario usuario = dao.Busca(login, senha);
   if(usuario != null)
   {
      Session["usuarioLogado"] = usuario;
      return RedirectToAction("Index", "Produto");
   }
   else
   {
      return RedirectToAction("Index");
   }
}

Perceba que, no código da aula, é retornado um objeto RedirectToAction, que irá executar a action Index do controller, que por sua vez irá invocar a view Index que está no arquivo index.cshtml.

Então, você precisaria deixar seu código igual ao do exercício para ele funcionar.

Boa sorte e bons estudos!

solução!

Olá Renan,

O erro ocorre porque ao tentar fazer o login com a senha incorreta, ele está tentando procurar pela view Autentica.cshtml ao invés de redirecionar de volta para a tela de login. No seu método Autentica:

[HttpPost]
public ActionResult Autentica(String login, String senha)
{
            UsuariosDAO dao = new UsuariosDAO();
            Usuario usuario = dao.Busca(login, senha);

            if (usuario != null)
            {
                Session["usuarioLogado"] = usuario;
                return RedirectToAction("Index", "Produto");
            }
            else
            {
                RedirectToAction("Index","Login");
            }
            return View();
}

note que no seu else até tem a chamada para o RedirectToAction para a página de login, mas não tem nenhum comando informando que devemos retorná-lo. E depois do else tem um return View(), que é ele que está fazendo o comportamento de buscar pela view com o mesmo nome do seu método Autentica.cshtml, que provavelmente você não deve ter no seu projeto dado que a ideia é voltar para a tela de login.

Oi pessoal, percebi meu erro. Pura falta de atenção.

Obrigado pelas explicações!