asp.net-mvc – 嵌套对象的远程ViewModel验证无效
我有一个类用户,看起来像这样:
public class User { public int UserId { get; set; } [Required(ErrorMessage = "A username is required.")] [StringLength(20,ErrorMessage = "Your username must be 4-20 characters.",MinimumLength = 4)] [RegularExpression("^[a-zA-Z0-9]*$",ErrorMessage = "Your username can only consist of letters and numbers.")] [Remote("UsernameExists","RemoteValidation",ErrorMessage = "Username is already taken")] public string Username { get; set; } [Required(ErrorMessage = "A password is required.")] [MinLength(4,ErrorMessage = "Your password must have at least 4 letters.")] public string Password { get; set; } [Required(ErrorMessage = "An email address is required.")] public string Email { get; set; } } 对于Register功能,我创建了一个ViewModel,它包含一个User对象和一个用于密码确认的字符串: public class RegistrationViewModel { public User User { get; set; } [DisplayName("Password confirmation")] [Required,Compare("User.Password",ErrorMessage = "The password do not match")] public string PasswordConfirmation { get; set; } } 我遇到的第一个问题是我似乎无法通过比较验证(“User.Password”),因为它似乎没有找到用户的属性.有没有办法根据User.Password属性验证PasswordConfirmation属性? 第二个问题是用户名字段的远程验证.我在http://davidhayden.com/blog/dave/archive/2011/01/04/ASPNETMVC3RemoteValidationTutorial.aspx跟随David Hayden的教程,但UsernameExists方法中的参数username始终为null.我在这里错过了什么吗? 编辑: 对不起,但我对于收到的密码比较错误实际上并不清楚.填写字段时工作正常,如果密码不匹配,我将收到错误.但是,在提交表单时,我在验证摘要中收到以下错误:找不到名为UserToRegister.Password的属性. 编辑2: 由于Joe的帖子,我已经找到了部分问题.远程验证器回发URL /?UserToRegister.Username = temp,这显然与我的控制器操作的username参数不匹配.为了将我的action参数映射到UserToRegister.Username,需要以下内容: public ActionResult UsernameExists([Bind(Prefix = "UserToRegister.Username")]string username) 现在,这正确地将参数传递给方法.但是,在密码字段上使用Compare属性时仍然会出现错误. 谢谢. 解决方法
针对User.Password属性验证PasswordConfigurmation属性的问题是由’jquery.validate.unobtrusive.js’文件中的错误引起的.
最初,jquery的“equalTo”函数是: adapters.add("equalto",["other"],function (options) { var prefix = getModelPrefix(options.element.name),other = options.params.other,fullOtherName = appendModelPrefix(other,prefix),element = $(options.form).find(":input[name=" + fullOtherName + "]")[0]; setValidationValues(options,"equalTo",element); }); 你只需要修改这一行: element = $(options.form).find(":input[name=" + fullOtherName + "]")[0]; 至: element = $(options.form).find(":input[name='" + fullOtherName + "']")[0]; 请注意’fullOtherName’选择器周围的单引号的添加.完成此更改后,客户端验证将按预期工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 在ASP.NET MVC 3中以特定格式验证日期
- asp-classic – 如何在VBScript中逐行读取CSV文件
- asp.net-mvc – 在asp.net mvc中的视图中设置页面标题,元信
- 如何使用asp.net在负载均衡机上获取访问者IP
- asp.net-mvc – ASP.NET MVC3 IIS无法获取加载样式表
- iis-7 – 捆绑不适用于映射的虚拟目录
- 会话状态ASP.Net的配置文件内存使用情况
- asp.net-mvc-4 – MVC4如何设置cookie然后重定向到一个动作
- 从ASP.NET中的代码隐藏文件设置iframe的src的最佳方法是什么
- 隐藏ASP.NET网站中的页面URL
- asp.net – 如何使用占位符属性与Html.EditorFor
- Asp.net url路由陷阱asmx web服务调用
- Forms身份验证应用程序中的ASP.NET Web服务
- 展望asp.net core Blazor项目c#编译为原生WebAss
- asp.net-mvc – ASP.NET MVC 1.0 – 字典的模型绑
- asp.net-mvc – ASP.NET MVC(和MvcContrib)的隐藏
- asp.net – WSDL.exe工具的/ serverInterface和/
- 捕获到ASP.NET ASMX Web服务的SOAP请求
- asp.net-mvc – MVC – 强类型视图被破坏
- 清除ASP.NET临时文件缓存的麻烦