ASP.NET MVC中[Remote]验证特性失效,其余属性验证正常该如何解决?
问题原因及修复方案
[Remote]特性的控制器名称参数错误
ASP.NET MVC 约定中,[Remote]特性第二个参数只需要填写控制器前缀名称,不需要带Controller后缀,你当前写的AccountController会导致路由匹配失败,验证请求根本不会走到对应的动作方法。把模型代码修改为:
[Remote("VerifyNewPassword", "Account", ErrorMessage="Error")]- JSON返回配置错误
如果你使用的是ASP.NET MVC 5及更早版本,默认禁止GET请求返回JSON结果,你需要在返回Json的时候显式指定允许GET请求:
如果你不想用GET请求,可以给public JsonResult VerifyNewPassword(ChangePasswordViewModel m) { return Json(false, JsonRequestBehavior.AllowGet); }[Remote]特性增加HttpMethod配置,指定用POST提交验证请求:[Remote("VerifyNewPassword", "Account", ErrorMessage="Error", HttpMethod = "POST")]- JSON返回配置错误
- 动作方法参数绑定不匹配
Remote验证默认只会传递当前正在验证的字段值到后端,你接收整个ChangePasswordViewModel的话,如果模型里其他必填字段没有赋值,可能会触发模型验证失败导致动作方法没有按预期执行。建议直接接收单个字段即可:
public JsonResult VerifyNewPassword(string newPassword) { // 你的验证逻辑 return Json(false, JsonRequestBehavior.AllowGet); }- 动作方法参数绑定不匹配
- 额外检查项
确认视图中NewPassword对应的input元素已经正确生成了data-val-remote相关的特性,没有被手动修改过验证属性。
- 额外检查项
内容的提问来源于stack exchange,提问作者Anna Boyko
相关产品推荐
相关产品推荐

