quarta-feira, 10 de março de 2010

Foco em PostBack - C#

Caros,

como um dos objetivos deste blog é arquivar coisas que são úteis para desenvolvimento web e também, trocar conhecimento, fiz este post porque conheci um recurso do Asp.Net que não conhecia: a manutenção de foco em postback.



Como já é de conhecimento geral, as páginas aspx(que contém códigos html, controles do asp.net, javascript, css e podem incluir também códigos de script de servidor) possuem um arquivo .cs correspondente(para quem desenvolve Asp.Net com c#), através da qual podemos manipular os eventos da página, suas propriedades, controles, dentre outras coisas.

Quando programamos o evento de um botão por exemplo, se este botão estiver no final da página, com scroll vertical, quando este botão é acionado, requisitando a função do servidor, o focus voltará para o início da página, pois haverá um "recarregamento" conhecido como PostBack, sendo que esta característica pode ser acessada da seguinte forma:

this.IsPostBack . Esta propriedade da página possui valor boleano(true ou false).

Toda vez que esta propriedade é "setada" para true, por algum evento ou algo acionado na página, a página perde o focus atual, voltando à sua posição inicial.

Muitas vezes, desejamos que o Focus se mantenha, como por exemplo, quando estamos trabalhando com o componente Calendar, para preencher automaticamente um controle
do tipo Text(por exemplo). Se este campo texto e calendário estiverem no final da página com scroll, o Postback gerado pelo evento de seleção de data no calendário fará com que se gere um efeito indesejado para o usuário, que terá que retornar manualmente ao fim da página, o que é incômodo dependendo do altura da mesma.

Como resolver este problema?

É só setar a propriedade MaintainScrollPositionOnPostback da tag principal da página aspx para true.

<%@ Page Language="C#" AutoEventWireup="true" MaintainScrollPositionOnPostback="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

Esta propriedade eu não conhecia e resolveu muitos problemas meus nos últimos dias.

Espero que seja útil a mais gente.

Abraços a todos

1 comentários: