客户端validationmvc 3.0中动态生成的表单元素

我已经阅读了很多关于如何在mvc 3.0中validation动态生成的内容,例如xhalent编写的内容,但我无法理解如何在我的代码中使用它。 我的意思是它不适用于动态生成的表单元素。 这是我的Model类:

public class Person { [Required] public string Name { get; set; } [Required] public string Phone { get; set; } public IList
Addresses{get;set;} public Person() { Addresses = new List
() { new Address(){Street="1"},new Address(){Street="2"} }; } } public class Address { [Required(ErrorMessage="Error")] public string Street { get; set; } }

这是开始显示表单的视图:

 <script src="" type="text/javascript"> <script src="" type="text/javascript"> <script src="" type="text/javascript">   
Person

  $().ready(function () { $("#add-phone").click(function () { $.ajax({ url: '', success: function (data) { $(".phone-numbers").append(data); } }); }); }); 

这是地址的局部视图:

 
m.Street) %> m.Street)%> m.Street) %>

首先,如果是部分视图,请将其添加到顶部

 <% if (Html.ViewContext.FormContext == null) { Html.ViewContext.FormContext = new FormContext(); } %> 

这应该为生成的内容添加不显眼的data-val- *validation属性。 在你的ajax下载的成功function中,最后插入它

  $().ready(function () { $("#add-phone").click(function () { $.ajax({ url: '<%: Url.Action("GetNewAddress") %>', success: function (data) { $(".phone-numbers").append(data); $("form").removeData("validator"); $("form").removeData("unobtrusiveValidation"); $.validator.unobtrusive.parse("form"); } }); }); }); 

这次它应该自动解析下载的内容并对其应用validation

我看了一下你的项目,发现动态validation的原因不起作用。 实际上你在那里遇到的问题多于validation。 首先,用于渲染地址的技术不正确。 这样,您生成的所有输入都具有相同的ID和名称值。 这就是为什么validation器无法区分动态添加内容和前一个内容的原因,它认为所有输入都是相同的,并根据第一街道validation所有街道。 而且,如果您发布了要在服务器上创建的内容,那么asp.net mvc模型绑定器就无法绑定街道数组 – 原因与validation器无法工作的原因相同。 请查看本文,以便在客户端正确生成列表内容。 对于以后的动态注入,您可以更改控制器代码

 public ActionResult GetNewAddress(string id) { ViewData.TemplateInfo.HtmlFieldPrefix = string.Format("[{0}]", id); return View("EditorTemplates/Addresses", new Address()); } 

从客户端传递正确的ID取决于你:)。

此外,您没有正确使用EditorTemplates,它们与Html.DisplayFor()一起使用,您不必手动指定它们的名称。 更多地了解它们,网上有数十篇文章