validação discreta não funciona com conteúdo dinâmico
Eu estou tendo problemas tentando obter a validação de jquery não intrusiva para trabalhar com uma visão parcial que é carregada dinamicamente através de uma chamada AJAX.
Eu tenho passado dias tentando fazer esse código funcionar sem sorte.
Aqui está a visão:
@model MvcApplication2.Models.test
@using (Html.BeginForm())
{
@Html.ValidationSummary(true);
<div id="res"></div>
<input id="submit" type="submit" value="submit" />
}
A visão parcial:
@model MvcApplication2.Models.test
@Html.TextAreaFor(m => m.MyProperty);
@Html.ValidationMessageFor(m => m.MyProperty);
<script type="text/javascript" >
$.validator.unobtrusive.parse(document);
</script>
O modelo:
public class test
{
[Required(ErrorMessage= "required field")]
public int MyProperty { get; set; }
}
O controlador:
public ActionResult GetView()
{
return PartialView("Test");
}
e finalmente, o javascript:
$(doument).ready(function () {
$.ajax({
url: '/test/getview',
success: function (res) {
$("#res").html(res);
$.validator.unobtrusive.parse($("#res"));
}
});
$("#submit").click(function () {
if ($("form").valid()) {
alert('valid');
return true;
} else {
alert('not valid');
return false;
}
});
A validação não funciona. Mesmo que eu não preencha nenhuma informação no texbox, o evento submit mostrará o alerta ('válido').
No entanto, se em vez de carregar dinamicamente a exibição, eu uso@Html.Partial("test", Model)
para renderizar a View parcial na visualização principal (e eu não faço a chamada AJAX), a validação funciona bem.
Isto é provavelmente porque se eu carregar o conteúdo dinamicamente, os controles não existem no DOM ainda. Mas eu faço uma ligação para$.validator.unobtrusive.parse($("#res"));
o que deve ser suficiente para deixar o validador sobre os controles recém-carregados ...
Alguém pode ajudar?