Ich habe Probleme beim Versuch, die unauffällige JQuery-Validierung mit einer Teilansicht zum Laufen zu bringen, die dynamisch über einen AJAX-Aufruf geladen wird.
Ich habe Tage damit verbracht, diesen Code ohne Glück zum Laufen zu bringen.
Hier ist die Ansicht:
@model MvcApplication2.Models.test
@using (Html.BeginForm())
{
@Html.ValidationSummary(true);
<div id="res"></div>
<input id="submit" type="submit" value="submit" />
}
Die Teilansicht:
@model MvcApplication2.Models.test
@Html.TextAreaFor(m => m.MyProperty);
@Html.ValidationMessageFor(m => m.MyProperty);
<script type="text/javascript" >
$.validator.unobtrusive.parse(document);
</script>
Das Model:
public class test
{
[Required(ErrorMessage= "required field")]
public int MyProperty { get; set; }
}
Der Controller:
public ActionResult GetView()
{
return PartialView("Test");
}
und schließlich das 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;
}
});
Die Validierung funktioniert nicht. Auch wenn ich keine Informationen in die Texbox eingebe, zeigt das Submit-Ereignis die Warnung an ('gültig').
Wenn ich jedoch die Ansicht nicht dynamisch lade, sondern @Html.Partial("test", Model)
die Teilansicht in der Hauptansicht rendere (und den AJAX-Aufruf nicht durchführe), funktioniert die Validierung einwandfrei.
Dies liegt wahrscheinlich daran, dass die Steuerelemente im DOM noch nicht vorhanden sind, wenn ich den Inhalt dynamisch lade. Aber ich rufe an, $.validator.unobtrusive.parse($("#res"));
was ausreichen sollte, um den Validator über die neu geladenen Steuerelemente zu informieren ...
Kann jemand helfen ?
unobtrusive.parse
Funktion einen Selektor als Argument und nicht als Element verwendet.