Tag Archives: 10920

ASP.NET – Bug no controle CalendarExtender/MaskedEditExtender do AJAX Control Toolkit

Dependendo da versão do AjaxControlToolkit utilizada, é preciso atentar a alguns bugs que ocorrem em alguns dos controles que o pacote disponibiliza.

Neste caso, o erro com que me deparei foi o seguinte, assumindo que o Depurador de Javascript do Internet Explorer esteja ativado:

Erro em tempo de execução do Microsoft JScript: ‘null’ é nulo ou não é um objeto

Ao enviar a execução para o Visual Studio, o erro acontece na seguinte execução:

var oldElement = newElement.cloneNode(true);

O erro ocorre numa combinação do uso dos controles CalendarExtender e MaskedEditExtender. O erro ocorre especificamente na função _switchMonth. Aparentemente, algumas data informadas no controle com MaskedEditExtender sem que o controle CalendarExtender tenha sido alguma vez chamado, e consequentemente criado, o bug é gerado. Um exemplo de data que gera o bug é 01/01/0002, dentre outras possíveis.

O erro ocorre por conta do seguinte código.

var newElement = this._modes[this._mode]; // new Element is NULL
var oldElement = newElement.cloneNode(true); // CRASH BOOM BANG.

A partir do Release 10920 do AjaxControlToolkit, o problema é resolvido. Porém, caso tenha alguma dificuldade com atualização de componentes ou se precisou promover alterações no toolkit que resultou em algo personalizado, o código que corrige o erro é:

this._isAnimating = true;

// Added by Deepak Chawla 23 July 2007 BUG: When the mask edit auto complete calls the calendars delegate body might not have been built
if (this._modes[this._mode] == null) // NEW CODE
this._buildBody(); // NEW CODE

var newElement = this._modes[this._mode];
var oldElement = newElement.cloneNode(true);

Referências:

http://www.codeplex.com/AjaxControlToolkit/WorkItem/View.aspx?WorkItemId=11121

http://www.codeplex.com/AjaxControlToolkit/Release/ProjectReleases.aspx?ReleaseId=4941

Tomás