使用动态表单进行ASP.Net MVC 3客户端validation

我正在尝试手动validation,所以我可以通过AJAX发布我的表单。

$("#formHolder").load(url);使用$("#formHolder").load(url);动态加载我的表单$("#formHolder").load(url);

当我将页面加载到DIV时,它总是validation为true,即使我的输入框为空。

即调用if($("#MyForm").valid()) //is always true

但是,如果我直接转到页面URL,它可以正常工作。

那么如何在通过.load(url);加载表单后正确初始化表单.load(url); 因为它在首次打开时不存在于页面上

我的Javascript是

 $('.myLink').click(function () { var url = '/newsletter/info/'; // this loads my HTML form from another page/view at runtime $("#formHolder").load(url, function () { $("#MyForm").validate(); // I thought this line would initialise it once it loads }).dialog({ modal: true, width:800, height: 600 }); return false; }); 

表单加载后手动调用$.validator.unobtrusive.parse()工作

我在这里找到了解决方案http://btburnett.com/2011/01/mvc-3-unobtrusive-ajax-improvements.html

最好的解决方案是在动态表单的ajax加载之后立即调用$.validator.unobtrusive.parse('#frmToBeValidated')

你的问题没有说明你是否需要做任何自定义来validation表单,所以我肯定会使用MVC3的内置jquery不显眼的validation:

如果这是你的型号:

 public class Person { [Required(ErrorMessage = "Email address required")] [DataType(DataType.EmailAddress, ErrorMessage = "Please enter valid email address")] public string Email { get; set; } } 

您的视图中的此表单代码将使用最少量的设置立即启用validation:

 @model MvcApplication12.Models.Person    @using (Ajax.BeginForm(new AjaxOptions())) { @Html.ValidationSummary(true) 
Person
@Html.LabelFor(model => model.Email)
@Html.EditorFor(model => model.Email) @Html.ValidationMessageFor(model => model.Email)

}

如果您希望在发布表单时获得更多function,则可以使用AjaxOptions:

 new AjaxOptions() { UpdateTargetId = "formupdate", OnSuccess = "javascript:alert('success');", OnFailure = "javascript:alert('failure');", OnComplete = "javascript:alert('complete');", OnBegin = "javascript:alert('begin');" }) 

这样,您可以在表单提交,完成,失败或开始时完全控制自定义操作。

希望这可以帮助!