none
Como exibir mensagem através de uma classe C#

    Question

  • Olá!

    Como faço pra exibir uma mensagem, de preferência um "Message Box", a partir de uma classe c#?
    Tive dificuldades, por exemplo, de exibir um erro gerado num "catch", pois ele estava na classe c# e o método "Response.Write("");" não fica disponível.

    Como faço para exibir esse erro tratado?

    try
                {
                    command.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
    Na linha do MessageBox dá o erro: "The name 'MessageBox' does not exist in the current context"

    Desde já agradeço.
    Friday, January 08, 2010 11:52 AM

Answers

  • Bom dia Elizier.

    Fiz um teste usando o código abaixo e funciona sem problemas, analise !

    Criei um método para gerar o erro:

    public int Metodo()
            {
                try
                {
                    int i = 1;
                    int j = 0;
                    i = i / j;
                    return i;
                }
                catch (Exception ex)
                {                
                    throw;
                }
                
            }
    Depois chamei o metodo no click para simular seu ambiente.

            protected void Button1_Click(object sender, EventArgs e)
            {
                try
                {
                    int i = Metodo();
                }
                catch (Exception ex)
                {
                    ClientScript.RegisterStartupScript(typeof(string), string.Empty,
                string.Format("window.alert(\"{0}\");", ex.Message), true);
                }
            }
    Faltou alguma coisa no seu ?

    “Caso esta resposta tenha ajudado a solucionar sua dúvida, favor clicar em “Marcar como Resposta” para beneficiar outros membros da comunidade que estejam lendo este thread”.
    Atenciosamente,
    Harley Araujo
    Monday, January 11, 2010 1:13 PM
    Owner
  • Olá Elizier,

    Acabei de ler a sua pergunta.

    Fiz um pequeno exemplo, espero que te ajude, Caso tenha mais dúvidas e só enviar um email.

            protected void btnExecutarMetodo_Click(object sender, EventArgs e)
            {
                try
                {
                    MetodoQueVaiGerarErro();
                }
                catch ( Exception ex )
                {
                    ExibirMensagemErro(ex.Message);
                }
    
            }
    
            /// <summary>
            /// Exibe a menagem de erro utilizando uma função javascript.
            /// </summary>
            /// <param name="pMensagemErro"></param>
            public void ExibirMensagemErro(string pMensagemErro)
            {
                if ( string.IsNullOrEmpty(pMensagemErro) )
                    Response.Write("<script>alert('" + pMensagemErro + "')");
            }
    
            public int MetodoQueVaiGerarErro()
            {
                /*
                 * Você não precisa criar o try/catch, a exceção sempre será lançada para o nível superior.
                 * você só deve utilizar o catch caso venha a tratar a exceção.
                 * Exemplo:
                 * var numero1 = 1;
                 * var numero2 = 0;
                 * try
                 * {
                 * int total = numero1/numero2;
                 * }
                 * Catch
                 * {
                 * MetodoQueVaiTratarAExcecao();
                 * throw
                 * }
                 */
    
                var numero1 = 1;
                var numero2 = 0;
    
                int total = numero1 / numero2;
    
                return total;
            }
    


    Patrick José
    Monday, January 11, 2010 11:05 PM
  • Bom dia Elizier.

    No  inseriDados() está assim:

     catch (Exception ex)
                {
                    throw;
                }

    Tente assim

     catch (Exception ex)
                {
                    throw ex;
                }

    Coloque também um breakpoint pra ver em qual metodo esta gerando a exception.



    “Caso esta resposta tenha ajudado a solucionar sua dúvida, favor clicar em “Marcar como Resposta” para beneficiar outros membros da comunidade que estejam lendo este thread”.
    Atenciosamente,
    Harley Araujo
    Monday, January 25, 2010 1:09 PM
    Owner

All replies

  • Talvez o ideal fosse você retornar a mensagem de erro para a página e la você faz o tratamento e da um alert em javascript.
    Friday, January 08, 2010 11:58 AM
  • Elizier,

    Dá uma olhada neste post, que vai te ajudar:
    http://www.danielgarcia.com.br/post/Executando-Java-Script-em-Tempo-de-Execucao-com-ASPNET.aspx

    Espero ter ajudado. Caso consiga solucionar o problema em função desta resposta, peço por favor, clicar em “Marcar como Resposta” para que outras pessoas também possam usufruir deste conteúdo.

    Abraço.
    Daniel Garcia
    MCP, MCTS, MCDP, MCT
    Meu blog: www.danielgarcia.com.br
    Twitter: http://twitter.com/danielsgarcia

    Friday, January 08, 2010 12:09 PM
  • sei...

    e como eu faço esse retorno para a página?

    Desde já agradeço.
    Friday, January 08, 2010 12:10 PM
  • Cara se você tiver tentando exibir MessageBox numa aplicação asp.net não vai rolar, pq ele é um controle para aplicações Windows Form (System.Windows.Forms). Em aplicações asp.net você tem como fazer isso usando JS.

    Abraços,
    Jarbas Segundo
    Desenvolvedor .NET
    http://blog.jsegundo.com.br
    Friday, January 08, 2010 12:12 PM
  • Na realidade, você deve utilizar o "throw ex" (propagar a exceção) no catch da sua classe. Fazendo isso vc poderá exibir a mensagem no catch do método em seu webform.

    Espero ter ajudado. Caso consiga solucionar o problema em função desta resposta, peço por favor, clicar em “Marcar como Resposta” para que outras pessoas também possam usufruir deste conteúdo.

    Abraço.
    Daniel Garcia
    MCP, MCTS, MCDP, MCT
    Meu blog: www.danielgarcia.com.br
    Twitter: http://twitter.com/danielsgarcia

    Friday, January 08, 2010 12:13 PM
  • Daniel,

    Obrigado pela ajuda.

    Seu blog é muito bom, e a sua dica funciona. Só que não funciona totalmente no meu caso. Eu estou fazendo um try dentro de uma classe c# criada por mim. Eu quero exibir o erro, caso ele ocorra. Porém toda função que exibe uma mensagem em asp.net só funciona na partial class das páginas. A dica do kauebranco parece ser a solução, só que eu não sei como fazer esse retorno q ele fala.

    Se alguém puder me ajudar, eu agradeço.

    public class DalPonto
        {
            string sql_connect = "Data Source=MIC-DEV05;Initial Catalog=ControlePonto;Integrated Security=True";
            
            public bool inseriDados(string Nome, string Login, string Data, string HoraDeEntrada, string HoraInicioAlmoco, string HoraFimAlmoco, string HoraFimExpediente, int CargaHoraria)
            {
                
                string sql_command = " insert into ControleDePonto (Data, Horadeentrada, Horadeiniciodealmoco, Horadefimdoalmoco, Horariodefimdoexpediente, Nome, userLogin, CargaHoraria) " +
                                 "values ('" + Data + "','" + HoraDeEntrada + "','" + HoraInicioAlmoco + "','" + HoraFimAlmoco + "','" + HoraFimExpediente + "','" + Nome + "','" + Login + "'," + CargaHoraria + ")";
                Console.Write(sql_command);
                SqlConnection conn = new SqlConnection(sql_connect);
    
                SqlCommand command = new SqlCommand(sql_command, conn);
    
                conn.Open();
                try
                {
                    command.ExecuteNonQuery();
                }
                catch (Exception e)
                {
                    
                }
                
                conn.Close();
                conn.Dispose();
    
                return true;
    
            }
    Friday, January 08, 2010 12:28 PM
  • Bom. Olhando o seu método vejo alguns caminhos.

    Você pode alterar o tipo de retorno pra STRING e dai na sua página você valida se veio vazio(é pq foi OK), ou se tem alguma mensagem dai você da um alert avisando o erro.(os pontos alterados estão sublinhados)

            public string inseriDados(string Nome, string Login, string Data, string HoraDeEntrada, string HoraInicioAlmoco, string HoraFimAlmoco, string HoraFimExpediente, int CargaHoraria)
            {
               
                string sql_command = " insert into ControleDePonto (Data, Horadeentrada, Horadeiniciodealmoco, Horadefimdoalmoco, Horariodefimdoexpediente, Nome, userLogin, CargaHoraria) " +
                                 "values ('" + Data + "','" + HoraDeEntrada + "','" + HoraInicioAlmoco + "','" + HoraFimAlmoco + "','" + HoraFimExpediente + "','" + Nome + "','" + Login + "'," + CargaHoraria + ")";
                Console.Write(sql_command);
                SqlConnection conn = new SqlConnection(sql_connect);

                SqlCommand command = new SqlCommand(sql_command, conn);

                conn.Open();
                try
                {
                    command.ExecuteNonQuery();
                }
                catch (Exception e)
                {
                     return e.Message;
                }
               
                conn.Close();
                conn.Dispose();

                return "";

            }
    Friday, January 08, 2010 12:32 PM
  • O que quis dizer é que precisa propagar a exceção para o método/evento (do webform) que faz chamada ao método da classe C#.

    Conforme a seguir:

    try
    {
       command.ExecuteNonQuery();
    }
    catch (Exception e)
    {
        throw e;            
    }
    

    Isso fará com que a exceção "estoure" na camada acima, no caso a sua página. Lá você exibirá a mensagem. Compreendeu?

    Espero ter ajudado. Caso consiga solucionar o problema em função desta resposta, peço por favor, clicar em “Marcar como Resposta” para que outras pessoas também possam usufruir deste conteúdo.

    Abraço.
    Daniel Garcia
    MCP, MCTS, MCDP, MCT
    Meu blog: www.danielgarcia.com.br
    Twitter: http://twitter.com/danielsgarcia

    Friday, January 08, 2010 12:34 PM
  • e como eu visualizo o exception nas classes que chamam o método no qual ele está contido?



    Friday, January 08, 2010 1:41 PM
  • Quando você propaga uma exceção ela sempre cai no catch do método/evento do qual está sendo invocado.

    Espero ter ajudado. Caso consiga solucionar o problema em função desta resposta, peço por favor, clicar em “Marcar como Resposta” para que outras pessoas também possam usufruir deste conteúdo.

    Abraço.
    Daniel Garcia
    MCP, MCTS, MCDP, MCT
    Meu blog: www.danielgarcia.com.br
    Twitter: http://twitter.com/danielsgarcia

    Friday, January 08, 2010 2:23 PM
  • Uma maneira legal, quando trabalhamos com excessões bem genéricas é utilizar a seguite notação:

    try
    {
       //código
    }
    catch
    {
       throw;
    }

    Neste código, capturamos qualquer tipo de excessão e lançamos para a camada que estiver mais acima ou a classe que estiver utilizando este método. Nós delegamos o tratamento desta excessão a quem efetivamente utilizar o método, não importanto qual o tipo de excessão foi lançado. Como toda classe herda de Exception e este catch captura qualquer excessão, lançaremos qualquer tipo erro.

    E como utilizaríamos:

    try
    {
       Metodo();
    }
    catch(Exception ex)
    {
       MessageBox.Show(ex.Message);
    }

    Se quiséssemos capturar excessões específicas:

    try
    {
       Metodo();
    }
    catch(SqlException ex)
    {
       MessageBox.Show("Erro de SQL: {0}", ex.Message);
    }
    catch(Exception ex)
    {
       MessageBox.Show("Erro genérico: {0}", ex.Message);
    }

    Como exibir as mensagens com um alert gerado pelo servidor?

    try
    {
       Metodo();
    }
    catch(Exception ex)
    {

    ClientScript.RegisterStartupScript(typeof(string), string.Empty,
                string.Format("window.alert(\"{0}\");", ex.Message), true);
    }

    Esta forma de exibir mensagens pode ser encapsulada em uma função.


    Espero ter ajudado.
    Abs

    Rodolfo Paoni
    Friday, January 08, 2010 5:01 PM
  • Rodolfo e Daniel, as explicações de vcs foram as melhores. Rodolfo vc mostra claramente como resolver minha questão. Vou testar, e retorno aqui para dá o tópico como resolvido.

     
    Friday, January 08, 2010 9:17 PM
  • Rodolfo,

    O tratamento do Exception funcionou perfeitamente. No catch em que devo exibir a mensagem de erro, eu coloquei o código abaixo:
    try
    {
       Metodo();
    }
    catch(Exception ex)
    {
    
    ClientScript.RegisterStartupScript(typeof(string), string.Empty,
                string.Format("window.alert(\"{0}\");", ex.Message), true);
    }
     
    Porém, nada acontece. a caixa de erro ñ é exibida. Coloquei um breakpoint, e a ex.Message está retornando o erro certinho, só ñ exibe.

    Desde já, agradeço a todos pelas respostas a este tópico.
    Saturday, January 09, 2010 12:16 AM
  •  

    try
    {
       Metodo();
    }
    catch(Exception ex)
    {
    
    ClientScript.RegisterStartupScript(typeof(string), string.Empty,
                string.Format("window.alert(\"{0}\");", ex.Message), true);
    }


    Substitua a linha sublinhada pelo código abaixo e veja se funciona...
     

    ClientScript.RegisterStartupScript(this.GetType(), "MsgException", "<script>alert('" + ex.Message + "');</script>");

     

    MsgException = o nome que eu dei a mensagem vc pode nomear da maneira que preferir...

    Espero que ajude...
    • Proposed as answer by Jones Roberto Saturday, January 09, 2010 11:56 AM
    Saturday, January 09, 2010 11:56 AM
  • Jones,

    O seu código funcionou em parte, pq ele só funciona na função page load . Em eventos de botões ele não funciona. O meu try catch está dentro de um evento de click do botão, e dentro do catch coloquei o código q exibe o erro.

    Criei um método em separado que só faz exibir o erro, e coloquei meu catch para chamar esse método. Mesmo assim ñ funcionou. :(

    O q é isso? :)
    Saturday, January 09, 2010 7:57 PM
  • Bom dia Elizier.

    Fiz um teste usando o código abaixo e funciona sem problemas, analise !

    Criei um método para gerar o erro:

    public int Metodo()
            {
                try
                {
                    int i = 1;
                    int j = 0;
                    i = i / j;
                    return i;
                }
                catch (Exception ex)
                {                
                    throw;
                }
                
            }
    Depois chamei o metodo no click para simular seu ambiente.

            protected void Button1_Click(object sender, EventArgs e)
            {
                try
                {
                    int i = Metodo();
                }
                catch (Exception ex)
                {
                    ClientScript.RegisterStartupScript(typeof(string), string.Empty,
                string.Format("window.alert(\"{0}\");", ex.Message), true);
                }
            }
    Faltou alguma coisa no seu ?

    “Caso esta resposta tenha ajudado a solucionar sua dúvida, favor clicar em “Marcar como Resposta” para beneficiar outros membros da comunidade que estejam lendo este thread”.
    Atenciosamente,
    Harley Araujo
    Monday, January 11, 2010 1:13 PM
    Owner
  • Olá Elizier,

    Acabei de ler a sua pergunta.

    Fiz um pequeno exemplo, espero que te ajude, Caso tenha mais dúvidas e só enviar um email.

            protected void btnExecutarMetodo_Click(object sender, EventArgs e)
            {
                try
                {
                    MetodoQueVaiGerarErro();
                }
                catch ( Exception ex )
                {
                    ExibirMensagemErro(ex.Message);
                }
    
            }
    
            /// <summary>
            /// Exibe a menagem de erro utilizando uma função javascript.
            /// </summary>
            /// <param name="pMensagemErro"></param>
            public void ExibirMensagemErro(string pMensagemErro)
            {
                if ( string.IsNullOrEmpty(pMensagemErro) )
                    Response.Write("<script>alert('" + pMensagemErro + "')");
            }
    
            public int MetodoQueVaiGerarErro()
            {
                /*
                 * Você não precisa criar o try/catch, a exceção sempre será lançada para o nível superior.
                 * você só deve utilizar o catch caso venha a tratar a exceção.
                 * Exemplo:
                 * var numero1 = 1;
                 * var numero2 = 0;
                 * try
                 * {
                 * int total = numero1/numero2;
                 * }
                 * Catch
                 * {
                 * MetodoQueVaiTratarAExcecao();
                 * throw
                 * }
                 */
    
                var numero1 = 1;
                var numero2 = 0;
    
                int total = numero1 / numero2;
    
                return total;
            }
    


    Patrick José
    Monday, January 11, 2010 11:05 PM
  • Olá,


    Segue um link explicando como exibir mensagens javascript do code-behind.
    http://imasters.uol.com.br/artigo/15170/dotnet/mensagem_em_javascript_com_net/


    A melhor forma de se fazer isto, varia como você implantou, ou desejou seu modelo de aplicação.
    Duas formas nesta thread estão bem explicativas, e bem implementadas, você decide qual usar. A explicação do kauebranco retornando uma string, ou mesmo a do Patrick Jose tratando via o catch de quem está chamando.



    Atenciosamente


    Thiago Dorneles
    Tuesday, January 12, 2010 11:43 AM
  • Valeu Pessoal,

    Fiz o teste que Harley postou, e deu tudo certo. Deve ser algum erro no meu código, pra não estar exibindo...
    Vou analisá-lo com mais calma.

    Obrigado a todos. 
    Wednesday, January 13, 2010 12:21 PM
  • o exemplo do Harley deu certo ???

    blog: emersonti.blogspot.com
    Emerson
    Wednesday, January 13, 2010 5:09 PM
  • Eu criei um novo projeto, joguei o código do Harley, e deu certo. Porém num projeto que estou participando, não deu certo.. Fiz da mesma forma, mas não funcionou. 
    try
                {
                    
                    lbHoraEntra.Text = lbHoraEnt.Text;
    
                    lbData.Text = DateTime.Now.Year.ToString() + "-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString();
    
                    HoraEntrada = lbHoraEntra.Text;
                    lbHoraEntra.Text = lbHoraEnt.Text;
                    P.Data = lbData.Text;
                    P.HoraDeEntrada = lbHoraEnt.Text;
    
                    P.Nome = lbContNome.Text;
                    P.Login = lbContLogin.Text;
    
                    if (lbContLogin.Text.Equals("amneves") || lbContLogin.Text.Equals("adssantana") || lbContLogin.Text.Equals("aopaiva") || lbContLogin.Text.Equals("gmsantos") || lbContLogin.Text.Equals("vilcsilva"))
                    {
                        P.CargaHoraria = 4;
                    }
                    else
                    {
                        if (lbContLogin.Text.Equals("mnovaes") || lbContLogin.Text.Equals("mlandrade"))
                        {
                            P.CargaHoraria = 6;
                        }
                    }
    
                    P.cadastrar(); //AQUI É GERADO O ERRO!!

     } catch (Exception ex) { //ClientScript.RegisterStartupScript(typeof(string), string.Empty, //string.Format("window.alert(\"{0}\");", ex.Message), true); } }
    Wednesday, January 13, 2010 7:25 PM
  • E os projetos foram criados da mesma forma ...

    Tipo versão de framework e tudo mais???



    Até Mais...
    Se for útil marcar como resposta
    Wednesday, January 13, 2010 8:50 PM
  • Sim. WebAplication (ASP.net e C#).
    Wednesday, January 13, 2010 9:29 PM
  • Quando você clica em um botão, você chama um método dentro da sua classe, certo?
    Crie o método do tipo string


    public string MeuMetodo()
    {

    }


    e no try/catch, dê um return sOK

    try
    {
      (...)
      sOk = "OK";
    }
    cath (Exeption ex)
    {
      sOK = ex.Message.toString();
      return sOK;
    }

    Ai sim, na página web, você joga um alert na tela por javascript.


    Ph
    Thursday, January 14, 2010 1:42 PM
  • Bom dia Elizier...

    O ponto de atenção é a linha do P.cadastrar();  !

    Veja se estye método tem try/cath e como estão sendo tratadas as exceções lá. Se for o caso posta o code do método pra gente analisar.

    Abraço

    “Caso esta resposta tenha ajudado a solucionar sua dúvida, favor clicar em “Marcar como Resposta” para beneficiar outros membros da comunidade que estejam lendo este thread”.
    Atenciosamente,
    Harley Araujo
    Friday, January 15, 2010 11:24 AM
    Owner
  • Segue o método P.cadastrar() :
    public bool cadastrar()
            {
                bool cadastro = false;
    
                Dal.DalPonto d = new Dal.DalPonto();
    
               try
                {
                    cadastro = d.inseriDados(Nome, Login, Data, HoraDeEntrada, HoraInicioAlmoco, HoraFImAlmoco, HoraFimExpediente, CargaHoraria);
                    
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                
                
                return cadastro;
            }
    Segue o código do método inseriDados()

      public bool inseriDados(string Nome, string Login, string Data, string HoraDeEntrada, string HoraInicioAlmoco, string HoraFimAlmoco, string HoraFimExpediente, int CargaHoraria)
            {
               
                string sql_command = " insert into ControleDePonto (Data, Horadeentrada, Horadeiniciodealmoco, Horadefimdoalmoco, Horariodefimdoexpediente, Nome, userLogin, CargaHoraria) " +
                                 "values ('" + Data + "','" + HoraDeEntrada + "','" + HoraInicioAlmoco + "','" + HoraFimAlmoco + "','" + HoraFimExpediente + "','" + Nome + "','" + Login + "'," + CargaHoraria + ")";
                Console.Write(sql_command);
                SqlConnection conn = new SqlConnection(sql_connect);
    
                SqlCommand command = new SqlCommand(sql_command, conn);
    
                conn.Open();
                try
                {
                    command.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    throw;
                }
    
                
                
                conn.Close();
                conn.Dispose();
    
                return true;
    
            }
    Sunday, January 17, 2010 6:53 PM
  • Bom dia Elizier.

    No  inseriDados() está assim:

     catch (Exception ex)
                {
                    throw;
                }

    Tente assim

     catch (Exception ex)
                {
                    throw ex;
                }

    Coloque também um breakpoint pra ver em qual metodo esta gerando a exception.



    “Caso esta resposta tenha ajudado a solucionar sua dúvida, favor clicar em “Marcar como Resposta” para beneficiar outros membros da comunidade que estejam lendo este thread”.
    Atenciosamente,
    Harley Araujo
    Monday, January 25, 2010 1:09 PM
    Owner
  • cara, me desculpe, agora que li direito, você usa o throw e depois usa outro try e catch na sua uil

    try { "Seu código"; } catch { ClientScript.RegisterStartupScript(typeof(string), string.Empty, string.Format("window.alert(\"{0}\");", ex.message), true); }

    espero que seja útil amigo, abraços.
    Thursday, October 10, 2013 12:56 PM