Ho problemi nel tentativo di far funzionare la convalida jquery discreta con una vista parziale caricata dinamicamente tramite una chiamata AJAX.
Ho passato giorni a cercare di far funzionare questo codice senza fortuna.
Ecco la vista:
@model MvcApplication2.Models.test
@using (Html.BeginForm())
{
@Html.ValidationSummary(true);
<div id="res"></div>
<input id="submit" type="submit" value="submit" />
}
La vista parziale:
@model MvcApplication2.Models.test
@Html.TextAreaFor(m => m.MyProperty);
@Html.ValidationMessageFor(m => m.MyProperty);
<script type="text/javascript" >
$.validator.unobtrusive.parse(document);
</script>
Il modello:
public class test
{
[Required(ErrorMessage= "required field")]
public int MyProperty { get; set; }
}
Il controller:
public ActionResult GetView()
{
return PartialView("Test");
}
e infine, il 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 convalida non funziona. Anche se non inserisco nessuna informazione nel texbox, l'evento submit mostra l'avviso ('valid').
Tuttavia, se invece di caricare dinamicamente la vista, utilizzo @Html.Partial("test", Model)
per eseguire il rendering della vista parziale nella vista principale (e non eseguo la chiamata AJAX), la convalida funziona perfettamente.
Ciò è probabilmente dovuto al fatto che se carico dinamicamente il contenuto, i controlli non esistono ancora nel DOM. Ma faccio una chiamata a $.validator.unobtrusive.parse($("#res"));
cui dovrebbe essere sufficiente per far conoscere al validatore i controlli appena caricati ...
Qualcuno può aiutare?
unobtrusive.parse
funzione accetta un selettore come argomento, non un elemento.