У мене проблеми, намагаючись змусити ненав’язливу перевірку jquery працювати з частковим видом, який динамічно завантажується через виклик AJAX.
Я цілими днями намагався змусити цей код працювати без удачі.
Ось вигляд:
@model MvcApplication2.Models.test
@using (Html.BeginForm())
{
@Html.ValidationSummary(true);
<div id="res"></div>
<input id="submit" type="submit" value="submit" />
}
Частковий вигляд:
@model MvcApplication2.Models.test
@Html.TextAreaFor(m => m.MyProperty);
@Html.ValidationMessageFor(m => m.MyProperty);
<script type="text/javascript" >
$.validator.unobtrusive.parse(document);
</script>
Модель:
public class test
{
[Required(ErrorMessage= "required field")]
public int MyProperty { get; set; }
}
Контролер:
public ActionResult GetView()
{
return PartialView("Test");
}
і нарешті, 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;
}
});
Перевірка не працює. Навіть якщо я не заповнюю жодної інформації в текстовому полі, подія подання відображає попередження ("дійсне").
Однак, якщо замість динамічного завантаження подання я використовую @Html.Partial("test", Model)
для часткового перегляду в основному поданні (і я не роблю виклику AJAX), тоді перевірка працює чудово.
Це, мабуть, тому, що якщо я завантажую вміст динамічно, елементи керування ще не існують у DOM. Але я роблю виклик, $.validator.unobtrusive.parse($("#res"));
якого повинно бути достатньо, щоб повідомити валідатор про нещодавно завантажені елементи керування ...
Хтось може допомогти?
unobtrusive.parse
функція приймає селектор як аргумент, а не елемент.