Mensagens no ASP.NET

 

Para mostrar caixas de confirmação ou caixas de mensagens em aplicações ASP.NET, fazemos uso da linguagem JavaScript, que nem sempre é de fácil manipulação. Seria muito mais fácil se tivéssemos uma classe MessageBox no ASP.NET, assim ficaria “menos complicado” a migração por exemplo, de nossas aplicações Win32 (ou Windows Forms) para a Web.

Felizmente, foi criado por Rodrigo Glauser (rsglauser@hotmail.com) um Web Control que encapsula script client side que interage com a aplicação ASP.NET. A instalação do controle é bastante fácil, basta utilizar o arquivo ControleMessageBox.dll que você pode baixar no exemplo que esta para download. Na Figura 1 temos o controle instalado no VS 2003 e VS 2005.

 

Figura 1. Controle instalado no VS 2003 e VS 2005

Conhecendo o MessageBox

O Web Control foi escrito em VB.NET, mas pode ser utilizado em qualquer linguagem que suporte o .NET Framework. Vamos criar uma nova aplicação ASP.NET do tipo C# no Visual Studio 2005 para testar a utilização do controle.

Existem dois métodos principais para o controle: ShowMessage para exibir uma mensagem e ShowConfirmation que solicita a escolha por parte do usuário de um dos botões mostrado na caixa de mensagem (OK ou Cancel). O método ShowConfirmation possui um parâmetro (Key) para que possamos identificar unicamente uma mensagem, assim podemos ter um MessageBox trabalhando com várias caixas de mensagens.

Outros dois parâmetros que o controle possui é para indicarmos se será gerado um PostBack quando um dos botões seja escolhido na caixa. Por exemplo, em uma caixa de mensagem que solicita a confirmação de exclusão, somente o botão OK gerará PostBack (normalmente), pois ao clicar em Cancel não faremos nenhuma interação com o usuário.

Primeiro exemplo

Adicione dois botões no formulário e um MessageBox. No evento Click dos botões adicione o seguinte código:

 

protected void Button1_Click(object sender, EventArgs e)

{

  MessageBox1.ShowMessage("Exibe uma mensagem");

}

protected void Button2_Click(object sender, EventArgs e)

{

  MessageBox1.ShowConfirmation("Condição: Ok ou Cancel",

    "Confirm", true, false);

}

 

O Button1 mostrará uma mensagem, enquanto o Button2 mostrará uma caixa de confirmação. Para realizar alguma tarefa quando o usuário clicar em OK, temos que utilizar o evento YesChoosed e NoChoosed quando clicar no botão Cancel.

Neste exemplo, vamos trabalhar com o YesChoosed, por que no código anterior, passamos True para o parâmetro PostBackOnYes do método ShowConfirmation. Assim, adicione o seguinte código no evento:

 

if (Key == "Confirm")

{

  MessageBox1.ShowMessage("Clicou no botão OK");

}

 

No evento temos um parâmetro chamado Key. Como comentamos anteriormente, podemos ter várias caixas de mensagens, utilizando somente um controle MessageBox, então temos que verificar qual a Key que vamos trabalhar.

Rode a aplicação, e quando clicar no botão será exibida uma caixa de confirmação, clicando em OK, teremos outra caixa de mensagem. Para fazer o mesmo exemplo com o botão Cancel, altere para True o parâmetro PostBackOnNo do método ShowConfirmation.

Segundo exemplo

Vamos utilizar o controle em um exemplo real. Imagine que você tem um DataGrid e deseja excluir um determinado registro, mostrando uma caixa de confirmação ao usuário. Para preencher o DataGrid utilize uma tabela de um banco de dados de sua escolha (estarei utilizando o SQL Server e o banco Northwind). Adicione o botão Delete no editor de colunas do DataGrid (Figura 2).

 

Figura 2. Trabalhando com o MessageBox no DataGrid

No evento DeleteCommand do DataGrid, adicione o seguinte código:

 

protected void DataGrid1_DeleteCommand(object source, DataGridCommandEventArgs e)

{

  MessageBox1.ShowConfirmation("Tem certeza que deseja excluir: " +

    e.Item.Cells[2].Text, "Grid", true, false);

}

 

Veja que estamos passando para o texto da caixa de confirmação, o valor da célula com o índice 2 (nesse caso o campo CategoryName). Lembre-se que o botão de exclusão, também conta na coluna do DataGrid.

Poderíamos utilizar o evento ItemCommand, mas teríamos de verificar qual o botão foi clicado (pois o mesmo é chamado quando qualquer Button Colunm for clicado). Agora, basta adicionar o código de exclusão do DataGrid no evento YesChoosed do MessageBox:

 

if (Key == "Confirm")

{

  MessageBox1.ShowMessage("Clicou no botão OK");

}

// código a ser adicionado

else if (Key == "Grid")

{

   //exclusão do registro

}

 

No exemplo que esta para download, utilizei um SQLCommand para realizar a exclusão. Utilizei também uma variável de sessão (Session) para indicar o valor da chave primária da tabela para a exclusão. Baixe o exemplo e veja como foi implementado.

Veja na Figura 3 a aplicação em execução.

 

Figura 3. Exemplo em execução

Nota: No exemplo, ao tentar excluir o registro temos uma mensagem de erro, indicando que temos uma ligação entre a tabela Categories e outra do banco de dados. Será necessário excluir os registros “pendentes” para a perfeita exclusão do registro da Categories. O escopo do artigo aborda a utilização do componente, por isso, deixo essa parte para cada um implementar a sua maneira.