Inquiridor
Switch só é executado no default, como resolver?

Pergunta
-
Boa tarde! Continuando com o meu projeto, estou tentado executar a minha tela de Login. O problema está no switch, veja as linhas de código:
protected void btnLogin_Click(object sender, EventArgs e) { SqlConnection con = new SqlConnection(); con.ConnectionString = @"Data Source=fabiano-pc\SQLEXPRESS;Initial Catalog=bdParaCadaCentavo;Integrated Security=True"; SqlDataReader DR; try { con.Open(); SqlCommand cmm = new SqlCommand(); cmm.CommandType = System.Data.CommandType.Text; cmm.CommandText = "SELECT * FROM tbCadastro"; cmm.Connection = con; DR = cmm.ExecuteReader(); if (DR.HasRows) { DR.Read(); txtMatricula.Text = Convert.ToString("Matricula"); txtUsuario.Text = Convert.ToString("Usuario"); ddlTipoUsuario.Text = Convert.ToString("TipoUsuario"); txtSenha.Text = Convert.ToString("Senha"); } switch (ddlTipoUsuario.Text) { case "Celetista 20 Horas": Response.Redirect("CalcSalario20Horas.Celetista.aspx" + "Celetista 20 Horas"); break; case "Celetista 30 Horas": Response.Redirect("CalcSalario30Horas.Celetista.aspx" + "Celetista 30 Horas"); break; case "Celetista 40 Horas": Response.Redirect("CalcSalario40Horas.Celetista.aspx" + "Celetista 40 Horas"); break; case "Celetista 44 Horas": Response.Redirect("CalcSalario44Horas.Celetista.aspx" + "Celetista 44 Horas"); break; case "Estatutário 20 Horas": Response.Redirect("CalcSalario20Horas.Estatutario.aspx" + "Estatutário 20 Horas"); break; case "Estatutário 30 Horas": Response.Redirect("CalcSalario30Horas.Estatutario.aspx" + "Estatutário 30 Horas"); break; case "Estatutário 40 Horas": Response.Redirect("CalcSalario40Horas.Estatutario.aspx" + "Estatutário 40 Horas"); break; default: lblMensagem.Text = "Não foi possível encontrar a página..."; break; } limpaCampos(); } catch (Exception ex) { lblMensagem.Text = string.Format("Erro: {0}", ex.Message); con.Close(); } }
O objetivo desse código é o usuário digitar sua matrícula, seu e-mail, tipo de usuário e senha. Veja as imagens:
Então! O switch está no ddlTipoUsuário. Após o usuário selecionar o seu tipo de usuário e confirmação dos demais atributos da tela de login, seria direcionado para uma WebForm. O que não está acontecendo, pois ao clicar no evento Logar, dá um erro, ou seja, vai para o default. Como resolver esse problema?
Todas as Respostas
-
Parece ser um erro simples.
1 - Você vai precisar setar um break point no método "btnLogin_Click".
2 - Acrescente o método trim ao aplicar o switch, ex: ddlTipoUsuario.Text.Trim()
2.1 - O trim remove os espaços em branco de uma string, espaços à diireita e esquerda da string.
3 - Veja o que está sendo carregado pelo modo debug do visual studio em ddlTipoUsuario.Text
Por favor, me retorne para caso eu tenha consiguido o ajudar.
-
Boa tarde, Gilberto!
Eu fiz assim:
switch (ddlTipoUsuario.Text.Trim()) { case "Celetista 20 Horas": Response.Redirect("CalcSalario20Horas.Celetista.aspx" + "Celetista 20 Horas"); break; case "Celetista 30 Horas": Response.Redirect("CalcSalario30Horas.Celetista.aspx" + "Celetista 30 Horas"); break; case "Celetista 40 Horas": Response.Redirect("CalcSalario40Horas.Celetista.aspx" + "Celetista 40 Horas"); break; case "Celetista 44 Horas": Response.Redirect("CalcSalario44Horas.Celetista.aspx" + "Celetista 44 Horas"); break; case "Estatutário 20 Horas": Response.Redirect("CalcSalario20Horas.Estatutario.aspx" + "Estatutário 20 Horas"); break; case "Estatutário 30 Horas": Response.Redirect("CalcSalario30Horas.Estatutario.aspx" + "Estatutário 30 Horas"); break; case "Estatutário 40 Horas": Response.Redirect("CalcSalario40Horas.Estatutario.aspx" + "Estatutário 40 Horas"); break; default: lblMensagem.Text = "Não foi possível encontrar a página..."; break; }
Continua dando o mesmo erro. Só executa o default.
-
Boa noite,
Amigo, não sei como esta sendo feito o tratamento de erro. Mas tente tirar a concatenação e deixar apenas a página ".aspx". Exemplo, deixe só assim:
case "Celetista 20 Horas": Response.Redirect("CalcSalario20Horas.Celetista.aspx");
Att,
Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
-
-
Bom dia, Silvaney!
Eu consegui. Tudo erro meu na sintaxe do código, veja:
public void TipoUsuario() { string TipoUsuario = ddlTipoUsuario.Text; switch (TipoUsuario) { case "Celetista 20 Horas": Response.Redirect("wfCalcSalario20Horas.Celetista.aspx"); break; case "Celetista 30 Horas": Response.Redirect("wfCalcSalario30Horas.Celetista.aspx"); break; case "Celetista 40 Horas": Response.Redirect("wfCalcSalario40Horas.Celetista.aspx"); break; case "Celetista 44 Horas": Response.Redirect("wfCalcSalario44Horas.Celetista.aspx"); break; case "Estatutário 20 Horas": Response.Redirect("wfCalcSalario20Horas.Estatutario.aspx"); break; case "Estatutário 30 Horas": Response.Redirect("wfCalcSalario30Horas.Estatutario.aspx"); break; case "Estatutário 40 Horas": Response.Redirect("wfCalcSalario40Horas.Estatutario.aspx"); break; default: lblMensagem.Text = "Não foi possível encontrar a página..."; break; } }
Eu esqueci de colocar wf antes do nome de cada página .aspx. Muito obrigado!
-
Bom dia, Gilberto!
Descobri o erro. Foi culpa minha, na sintaxe do código. Veja:
public void TipoUsuario() { string TipoUsuario = ddlTipoUsuario.Text; switch (TipoUsuario) { case "Celetista 20 Horas": Response.Redirect("wfCalcSalario20Horas.Celetista.aspx"); break; case "Celetista 30 Horas": Response.Redirect("wfCalcSalario30Horas.Celetista.aspx"); break; case "Celetista 40 Horas": Response.Redirect("wfCalcSalario40Horas.Celetista.aspx"); break; case "Celetista 44 Horas": Response.Redirect("wfCalcSalario44Horas.Celetista.aspx"); break; case "Estatutário 20 Horas": Response.Redirect("wfCalcSalario20Horas.Estatutario.aspx"); break; case "Estatutário 30 Horas": Response.Redirect("wfCalcSalario30Horas.Estatutario.aspx"); break; case "Estatutário 40 Horas": Response.Redirect("wfCalcSalario40Horas.Estatutario.aspx"); break; default: lblMensagem.Text = "Não foi possível encontrar a página..."; break; } }
Era só acrescentar wf antes do nome de cada página .aspx.