不显眼的validation不适用于dynamic内容
我有问题试图让不显眼的jQueryvalidation工作与通过AJAX调用dynamic加载的部分视图。
我花了好几天的时间试图让这个代码没有运气的工作。
这是观看:
@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; } });
validation不起作用。 即使我没有填写任何信息,提交事件显示警报(“有效”)。
但是,如果不是dynamic加载视图,我使用@Html.Partial("test", Model)
在主视图中呈现局部视图(并且我不执行AJAX调用),那么validation工作就好。
这可能是因为如果我dynamic地加载内容,DOM中不存在控件。 但是我打电话给$.validator.unobtrusive.parse($("#res"));
这应该足以让validation器有关新加载的控件…
谁能帮忙?
如果您尝试parsing已经parsing的表单,它将不会更新
将dynamic元素添加到表单时,您可以做什么
-
你可以删除表单的validation并重新validation它是这样的:
var form = $(formSelector) .removeData("validator") /* added by the raw jquery.validate plugin */ .removeData("unobtrusiveValidation"); /* added by the jquery unobtrusive plugin*/ $.validator.unobtrusive.parse(form);
-
使用jquery
data
方法访问表单的unobtrusiveValidation
数据:$(form).data('unobtrusiveValidation')
然后访问规则集合并添加新的元素属性(这有点复杂)。
你也可以看看这篇文章应用不显眼的jqueryvalidationdynamic内容在ASP.Net MVC插件用于添加dynamic元素到窗体。 这个插件使用第二个解决scheme。
除了Nadeem Khedr的回答….
如果您已经将表单加载到您的DOMdynamic然后调用
jQuery.validator.unobtrusive.parse(form);
(提到额外的位),然后将使用ajax提交该表单记得打电话
$(form).valid()
在提交表单之前返回true或false(并运行实际validation)。
添加到您的_Layout.cshtml
$(function () { //parsing the unobtrusive attributes when we get content via ajax $(document).ajaxComplete(function () { $.validator.unobtrusive.parse(document); }); });
testing这个:
if ($.validator.unobtrusive != undefined) { $.validator.unobtrusive.parse("form"); }
令人惊讶的是,当我看到这个问题时,官方的ASP.NET文档仍然没有任何有关不显眼的parse()
方法的信息,或者如何在dynamic内容中使用它。 我冒昧地在docs repo(引用@ Nadeem的原始答案)中提出一个问题,并提交一个pull请求来解决它。 此信息现在可在模型validation主题的客户端validation部分中看到。
- 无法加载文件或程序集“WebGrease,Version = 1.5.1.25624,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”或其某个依赖关系
- path控制器未find或未实现IController
- 奇怪的错误升级ASP.NET MVC从4到5
- DataSet不支持导出中的System.Nullable <>
- 剃刀动作链接自动生成?长度= 7的URL?
- IISExpress与0xc0000008错误崩溃
- Windows Workflow Foundation 4和ASP.NET MVC
- 如何调用另一个控制器操作从Mvc中的控制器
- 剃刀2剃刀3 MVC 5