mar
18
2011

Executando Javascript Carregado Dinamicamente por AJAX com ASP.NET MVC

Depois de começar a trabalhar com ASP.NET MVC comecei a perceber que havia um problema ao carregar algumas páginas via AJAX. A validação do lado cliente do próprio ASP.NET, chamadas a métodos javascript ou até mesmo um simples alert não eram executados.

A principal causa tem haver com a forma que a resposta que vem por AJAX é injetada na página. Por padrão no ASP.NET qualquer javascript carregado em um elemento DOM da página através de Ajax.ActionLink ou Ajax.BeginForm não será executado. Outro problema é que a validação do lado cliente precisa ser reinicializada depois que uma view parcial é carregada dinamicamente.

Algumas das soluções encontradas após pesquisar sobre o problema foram criar uma função javascript na página e colocá-la em na propridade AjaxOption.OnSuccess ou então utilizar jQuery diretamente para tratar esses casos. Isso contraria completamente a idéia de estar utilizando um framework que tenha validação do lado do cliente e AJAX de uma forma mais simples, e ao mesmo tempo ter de utilizar outros métodos para conseguir utilizar as mesmas funcionalidades que já são oferecidas pelo framework.

Depois de pesquisar mais um pouco encontrei uma solução melhor e que faz com que o código javascript carregado dinamicamente seja executado e reinicializa a validação do cliente automaticamente. Em resumo a solução é alterar o comportamento padrão do método Sys.Mvc.MvcHelpers._onComplete do arquivo MicrosoftMvcAjax.js.

O arquivo com a solução é esse: AjaxLoadedContentScriptFix.js.

Basta incluir o script na aplicação depois dos scripts jQuery e MicrosoftMVCValidation.