asp.net-mvc-4 – ASP.NET MVC RemoteAttribute验证无效 – 操作
我一直在努力弄清楚为什么没有触发ValidationController动作.
我在项目范围的web.config中启用了设置: <add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 我有以下控制器: [OutputCache(Location = OutputCacheLocation.None,NoStore = true)] public class ValidationController : Controller { private readonly IUserRepository userRepository; public ValidationController(IUserRepository userRepository) { this.userRepository = userRepository; } public JsonResult IsUserNameAvailable(string username) { User user = userRepository.Get(u => u.UserName == username); if (user == null) return Json(true,JsonRequestBehavior.AllowGet); else return Json(false,JsonRequestBehavior.AllowGet); } } 和以下viewmodel: [Required(ErrorMessage = "Required *")] [StringLength(50,MinimumLength = 4,ErrorMessage = "Please keep the username between four and twenty character.")] [Remote("IsUserNameAvailable","Validation",ErrorMessage = "A user with this username already exists.")] [Display(Name = "Username")] public string UserName { get; set; } 我的表格中有以下字段: <form id="registerForm"> ... @Html.ValidationMessageFor(m => m.UserName) @Html.TextBoxFor(m => m.UserName) @Html.LabelFor(m => m.UserName) </form> 我做了ajax表单提交,并且已经完美地完成了服务器端验证: $.post("/Account/Register",$('#registerForm').serialize(),function(){ updateFormWithServerGeneratedErrors(); }) 虽然服务器为我的字段生成了正确的输入标记: <input ... data-val-remote-url="/Validation/IsUserNameAvailable" data-val-remote-additionalfields="*.UserName" data-val-remote="A user with this username already exists." ... > 我可以通过在url中输入来手动点击我的操作:“/ Validation / IsUserNameAvailable?username = SomeName”但是Fiddler没有在按键或焦点更改上显示对此URL的任何请求. 根据this tutorial我不需要编写任何javascript来使这个工作.是的,我开始修改表单时已经加载了jquery.validate.js和jquery.validate.unobtrusive.js脚本. 这里有什么问题? 解决方法
好的,我找到了答案.
引用Darin Dimitrov here: “不显眼的验证不会在动态添加元素到DOM的情况下开箱即用 – 例如向服务器发送AJAX请求,返回部分视图,然后将此部分视图注入DOM. 为了使其工作,您需要使用不显眼的验证框架注册这些新添加的元素.为此,您需要在新添加的元素上调用$.validator.unobtrusive.parse.您应该将此代码放在将部分注入DOM的AJAX成功处理程序中.“ 框架在页面加载时调用此方法一次,我的场景中的问题是表单本身是一个jquery对话框,因此即使初始加载也是“动态的”.我必须在对话框加载时使用不显眼的框架注册表单元素: $.validator.unobtrusive.parse('#registerForm'); 如果它在服务器端没有验证,我的ajax调用也将返回并替换表单: registerDialog.empty().html(result.viewResult); 所以我不得不在成功回调上调用parse(),以确保在ajax提交后验证继续有效. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-4 – 如何在MVC 4中每3秒刷新一次局部视图?
- asp.net – 验证失败后如何防止页面跳转到顶部位置?
- .net – Ninject的InRequestScope发生了什么事
- asp.net – ASP .NET ProcessModel配置
- ASP.NET Requests Queued导致网站崩溃. SQL后端,IIS6
- asp.net-mvc – ASP.NET MVC Html.DropDownList由Ajax调用控
- asp.net-mvc – ASP.NET MVC – 接口类型上的自定义模型绑定
- asp.net – app_offline.htm在生产框中抛出HTTP 500错误
- asp.net – 当服务器运行3.5时,以.NET 3.5内置到目标4.0的站
- 如何部署/发布ASP.NET网站?
- ASP.NET(MVC)Outputcache和并发请求
- asp.net-mvc – asp.net mvc:运行error.cshtml的
- asp.net – DataList中的分页无法正常工作
- asp.net-mvc – MVC帖子没有填充模型
- 在TextBox,ASP.NET中处理ENTER按钮
- asp.net – 如何使用OctopusDeploy安装Windows服
- asp.net – 使用javascript和服务器端禁用/启用r
- asp.net-mvc – ASP.net MVC路由参数异常
- asp.net-mvc – ASP.NET MVC应用程序自定义错误页
- asp.net-mvc – 如何使用app_start或webactivato