none
Switch só é executado no default, como resolver? RRS feed

  • 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?

    sábado, 7 de maio de 2016 18:58

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.

    domingo, 8 de maio de 2016 02:12
  • 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.

    domingo, 8 de maio de 2016 18:25
  • 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.

    segunda-feira, 9 de maio de 2016 02:26
  • Boa noite, Silvaney!

    Muito obrigado pela contribuição, mas, não funcionou.

    segunda-feira, 9 de maio de 2016 22:32
  • 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!

    terça-feira, 10 de maio de 2016 12:54
  • 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.

    terça-feira, 10 de maio de 2016 12:56