使用动态表单进行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) }
如果您希望在发布表单时获得更多function,则可以使用AjaxOptions:
new AjaxOptions() { UpdateTargetId = "formupdate", OnSuccess = "javascript:alert('success');", OnFailure = "javascript:alert('failure');", OnComplete = "javascript:alert('complete');", OnBegin = "javascript:alert('begin');" })
这样,您可以在表单提交,完成,失败或开始时完全控制自定义操作。
希望这可以帮助!