J'ai des difficultés à faire fonctionner la validation jquery discrète avec une vue partielle chargée dynamiquement par un appel AJAX.
J'ai passé des jours à essayer de faire fonctionner ce code, sans succès.
Voici la vue :
@model MvcApplication2.Models.test
@using (Html.BeginForm())
{
@Html.ValidationSummary(true);
<div id="res"></div>
<input id="submit" type="submit" value="submit" />
}
La vue partielle :
@model MvcApplication2.Models.test
@Html.TextAreaFor(m => m.MyProperty);
@Html.ValidationMessageFor(m => m.MyProperty);
<script type="text/javascript" >
$.validator.unobtrusive.parse(document);
</script>
Le modèle :
public class test
{
[Required(ErrorMessage= "required field")]
public int MyProperty { get; set; }
}
Le contrôleur :
public ActionResult GetView()
{
return PartialView("Test");
}
et enfin, le 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;
}
});
La validation ne fonctionne pas. Même si je ne remplis aucune information dans la boîte de texte, l'événement submit affiche l'alerte ('valid').
Cependant, si au lieu de charger dynamiquement la vue, j'utilise @Html.Partial("test", Model)
pour rendre la vue partielle dans la vue principale (et je ne fais pas l'appel AJAX), alors la validation fonctionne très bien.
C'est probablement parce que si je charge le contenu dynamiquement, les contrôles n'existent pas encore dans le DOM. Mais je fais un appel à $.validator.unobtrusive.parse($("#res"));
ce qui devrait suffire à informer le validateur des contrôles nouvellement chargés...
Quelqu'un peut-il m'aider ?