ASP.NET - Definindo o botão padrão para submeter um formulário


Suponha o seguinte cenário:

- Você possui uma página .aspx que esta exibindo um formulário que contém dois botões : Enviar e Cancelar.

- O usuário pressiona a tecla ENTER

Pergunta : Qual dos botões será acionado ? (Você tem 5 segundos para responder...)

Se você ainda esta pensando este artigo veio para esclarecer as suas dúvidas e mostrar como definir o botão padrão para submeter o formulário em um formulário com mais de um botão quando o usuário pressionar a tecla ENTER.

Se você fosse tentar realizar esta tarefa na ASP ou ASP.NET 1.1 teria que escrever um código JavaScript do lado do cliente que fosse executado quando a página fosse carregada no Browser. O script deveria capturar o evento KeyPress e deveria verificar se a tecla pressionada é a tecla ENTER para realizar um postback para o formulário. Pode parecer simples mas para complicar o código JavaScript poderia ser diferente para cada versão de Navegador.

Este pesadelo é passado para quem esta usando a ASP.NET 2.0. 

A ASP.NET 2.0 apresenta entre suas inúmeras novidades uma propriedade chamada DefaultButton para o objeto Form que permite que você defina o botão que será usado como padrão quando o usuário pressionar a tecla ENTER. A ASP.NET gera o script do lado do cliente para você.

Como exemplo , supondo a existência de um botão de Login em uma página .aspx temos:

Page.Form.DefaultButton = btnLogin.UniqueID

Para implementar esta funcionalidade você deve levar em conta os seguintes fatores:

Se estas orientações não forem seguidas uma exceção será lançada quando a página for exibida indicando que o botão padrão precisa ser um controle que implementa IButtonControl.

Colocando a teoria em prática:

Abra o Visual Web Developer e crie um novo Web Site. Eu dei o nome aspNetForms ao projeto.

A seguir selecione a página default.aspx e ative o modo Design. Inclua na página uma tabela e dois botões de comando conforme o leiaute da figura abaixo:

A seguir inclua o seguinte código no arquivo code-behind default.aspx.vb

Partial Class _Default
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     Page.Form.DefaultButton = btnLogin.UniqueID
End Sub

Protected Sub btnCancela_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCancela.Click
    Response.Redirect("cancela.aspx")
End Sub

Protected Sub btnLogin_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnLogin.Click
     Response.Redirect("Login.aspx")
End Sub

End Class

Executando o projeto no servidor ASP.NET obtemos o seguinte resultado:

A página default.aspx.

Ao pressionar ENTER o botão Login que esta definido como o

botão padrão será acionado executando o código:

Response.Redirect("Login.aspx")

A página login.aspx sendo exibida.

Obs: Deixo a criação da página cancela.aspx a seu cargo.

Eu sei, é apenas ASP.NET, mas eu gosto... 


José Carlos Macoratti