Unobtrusive jQuery Validation com forms dinâmicos
Recentemente tive um problema ao usar um form dinâmico no ASP.NET MVC. A validação não "intrusiva" é processada assim que a página termina de carregar, e a partir daquele momento não é mais alterada. Porém eu tinha uma página que carregava todo o conteúdo do form via Ajax, e neste caso é ainda pior do que carregar um novo form, pois se o form já existia ele é marcado para não ser processado novamente, então preciso primeiro desmarca-lo e depois ativar a validação novamente. O código é simples, só não é algo suportado ou documentado, e depende de detalhes da implementação atual:
var form = $('#form-adiciona-entrega');
form.removeData('validator').removeData('unobtrusiveValidation');//Este passo só é necessário se o form já existia. Se o form em si é gerado dinamicamente, não precisa desse "reset"
$.validator.unobtrusive.parse(form);
Encontrei também este código, que diz fazer isso automaticamente a cada chamada ajax, mas que depende também de detalhes do ASP.NET MVC:
$(document).ajaxSuccess(function (event, xhr, settings) {
if (settings.mvcTargetElement) {
$(settings.mvcTargetElement.getAttribute("data-ajax-update")).each(function () {
$.validator.unobtrusive.parse(this);
});
}
});
Fontes:
http://btburnett.com/2011/01/mvc-3-unobtrusive-ajax-improvements.html
http://stackoverflow.com/questions/11045256/jquery-client-side-validate-not-working