Hoje comecei minha manhã revisando blogs e sites de notícias e vi um link em www.asp.net para manipulando a tecla enter em formulários da web . Este tem sido um problema constante para mim ao longo dos anos. Eu tentei algumas soluções JavaScript, assim como todo mundo, mas em algum ponto todas parecem falhar. Eu sei que li sobre uma nova maneira de definir o Foco de formulário inicial em uma página ASP.NET 2.0 com a propriedade DefaultFocus, mas não tive tempo para investigá-la. Mas eu gastei um pouco de tempo investigando o uso da propriedade DefaultButton de formulários e painéis ASP.NET 2.0 esta manhã e fiquei surpreso com os resultados. Também decidi estender isso para a propriedade DefaultFocus.

Se você sabe alguma coisa sobre a maneira como eu construo sites ASP.NET, sou muito fã de classes básicas que herdam do.NET framework. Eu tenho uma classe base que herdo em todas as minhas classes Code Behind, ExBasePage. Ele contém uma grande variedade de propriedades e métodos úteis e reutilizáveis ​​que pareço usar em todos os sites. Em muitos casos, criarei classes específicas para um projeto que conterão propriedades e métodos extras que usarei naquele site continuamente. Um exemplo seria ExSSLPage, que garante que uma página só seja renderizada por SSL. Parece que estou sempre encontrando novos métodos e propriedades para descer em minha classe base, hoje adicionei mais dois, DefaultButton e DefaultFocus.

”’

”’Define o botão padrão que será clicado quando um usuário pressionar a tecla Enter.
”’

”’
”’
”’
Propriedade protegida DefaultButton () As String
Get

If Not IsNothing (Master.Page) Then
Return Master.Page.Form.DefaultButton
Else
Retornar Page.Form.DefaultButton
End If

End Get
Set (ByVal value As String)

If Not IsNothing (Master.Page) Then
Master.Page.Form.DefaultButton=valor
Else
Page.Form.DefaultButton=valor
End If

End Set
End Property

”’

”’Define o padrão Controle para colocar o foco inicial.
”’

”’
”’
”’
Propriedade protegida DefaultFocus () As String
Get

If Not IsNothing (Master.Page) Then
Return Master.Page.Form.DefaultFocus
Else
Return Page.Form.DefaultFocus
End If

End Get
Set (ByVal value As String)

If Not IsNothing (Master.Page) Then
Master.Page.Form.DefaultFocus=value
Else
Page.Form.DefaultFocus=value
End If

End Set
End Property

Primeiro, deixe-me explicar um pouco sobre o que está acontecendo. Eu defini duas propriedades com estruturas muito semelhantes, uma define o DefaultButton e a outra o DefaultFocus para a página. Desde que atualizei meus sites para o ASP.NET 2.0, comecei a usar bastante as páginas mestras. Às vezes eu não preciso de uma página mestra, mas ainda uso minha classe baseada em ExBasePage como minha base de páginas. No último caso, o Master.Page não será nada e, em vez disso, precisamos fazer referência ao objeto Página. Coloquei uma captura simples aqui para lidar com esse caso.

A próxima coisa que percebi é que você não pode simplesmente passar o ID do controle como uma string, você deve passar o UniqueId do controle. Descobri isso por meio de tentativa e erro. Usar as propriedades com sucesso seria algo assim:

DefaultButton=btnSubmit.UniqueID
DefaultFocus=txtMyTextBox.UniqueID

Agora, para a propriedade DefaultButton, você precisa passar um controle que é derivado de IButtonControl, como um Button, LinkButton ou ImageButton. Caso contrário, você lançará uma exceção.

Outra observação, é que a propriedade padrão do botão também pode ser usada em painéis. Desde a atualização para o ASP.NET 2.0, não estou usando painéis e os substituí pelo MultiView. Neste ponto, não vejo acesso à propriedade DefaultButton na classe View, mas quem sabe. Você sempre pode capturar o evento ActiveViewChanged e definir o DefaultButton lá.

Meus testes iniciais foram bem-sucedidos e planejo implementar isso em um site de produção ainda hoje!

Compartilhe este artigo com seus amigos!

Source link

Categories: Wordpress