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。