ASP.NET MVC 3使用子集合进行不显眼的jQuery客户端validation

相关问题:

  • ASP.NET MVC 3:当BeginForm在布局上时生成不显眼的validation
  • ASP.NET MVC 3使用动态内容进行不显眼的客户端validation

我有一个ASP.NET MVC视图,呈现用户可以添加到的项目集合: –

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>    model.Id) %>  ... 
Value

<%= Html.ActionLink(x => x.ChildRow(), "Add another...", new { @class = "addRow" }) %>

“ChildRow”部分内容如下: –

 <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>     model.Id)%>    model.Value)%>  model.Value)%>    

我正在使用jQuery来抓取代表行的部分: –

 $("a.addRow").live("click", function () { $.ajax({ url: this.href, cache: false, success: function (html) { $(this).parents("form:first").children("table:first tbody:last").append(html); $.validator.unobtrusive.parse("form"); } }); return false; }); 

我遇到的问题是客户端validation不适用于由jQuery添加的行。 从我的脚本中可以看出,我在ajax调用之后在表单上运行validation器。 据我所知,问题是Html.BeginForm()调用不在ajax部分上,因此validation属性没有被添加到输入元素。 即如果我在添加一行后查看标记: –

页面加载时存在的输入如下: –

  

通过ajax添加的输入如下: –

  

显然由于表单的性质,我无法将Html.BeginForm调用移动到我的局部视图上。 由于页面是通过ajax加载的,我也不能破解部分的FormContext。

还有其他方法可以启用客户端validation吗?

编辑

根据下面的counsellorben的答案,我设置了FormContext,现在属性正确呈现,但是validation仍然无法正常工作(如果我添加一个新行并将文本框留空,则应用程序通知的第一个是我的断点时编辑POST动作被击中)。

我做了一些测试,并且肯定正在调用$ .validator.unobtrusive.parse函数,parseElement函数肯定被称为表中新输入数的正确次数,以及行“info.attachValidation( );” 进一步向下解析function肯定会被击中。 这就是我所拥有的。 还在测试。

您遇到的问题是,当服务器创建新行时,不存在FormContext。 必须存在FormContext才能将不显眼的validation属性添加到生成的HTML中。 将以下内容添加到局部视图的顶部:

 if (this.ViewContext.FormContext == null) { this.ViewContext.FormContext = new FormContext(); } 

counsellorben

作为我问题第二部分的答案,显然你不能在表单上调用jquery.validate.unobtrusive.parse两次。 如果表单已有validation器,则不会替换它。

要给advllorben接受的答案,因为他的位是迄今为止的难点:D

编辑

哦,似乎我不是第一个找到它的人:

http://xhalent.wordpress.com/2011/01/24/applying-unobtrusive-validation-to-dynamic-content/

像这些线条一样添加不引人注目的:

 1) $.validator.unobtrusive.parse($('#yourformid')); 2) var $form1 = $('#workOrderDetails'); 3) if ($form1.valid()) { //your ajax or your code comes here } 

我假设您已为消息添加了validation摘要或validationmessagefor。