c# – 自定义数据注释永远不会调用IsValid. (ASP.NET MVC 2 .NET
发布时间:2020-12-15 07:42:53 所属栏目:百科 来源:网络整理
导读:我有一个自定义数据验证属性我创建,以确保用户输入的密码是相同的,但从不调用IsValid. 自定义属性: public class IsSameAsAttribute : ValidationAttribute{ public String TargetProperty { get; set; } private readonly object _typeId = new object();
我有一个自定义数据验证属性我创建,以确保用户输入的密码是相同的,但从不调用IsValid.
自定义属性: public class IsSameAsAttribute : ValidationAttribute { public String TargetProperty { get; set; } private readonly object _typeId = new object(); public IsSameAsAttribute(string targetProperty) { TargetProperty = targetProperty; } public override bool IsValid(object value) { return false; //Type objectType = value.GetType(); //bool isValid = false; //PropertyInfo[] neededProperties = // objectType.GetProperties().Where(propertyInfo => propertyInfo.Name == TargetProperty).ToArray(); //return isValid; } public override object TypeId { get { return _typeId; } } } 它适用的数据模型: public class RegistrationData { [Required(ErrorMessage = "First Name Required")] [StringLength(100,ErrorMessage = "First Name must be 100 characters or less.")] public String FirstName { get; set;} [Required(ErrorMessage = "Last Name Required")] [StringLength(100,ErrorMessage = "Last Name must be 100 characters or less.")] public String LastName { get; set; } [Required(ErrorMessage = "Email is Required")] [StringLength(200,ErrorMessage = "Email must be 200 characters or less.")] [RegularExpression(@"w+([-+.']w+)*@w+([-.]w+)*.w+([-.]w+)*",ErrorMessage = "Valid Email Address is required.")] public String Email { get; set; } [Required(ErrorMessage = "Password is required")] public String Password { get; set; } [IsSameAs("Password")] public String PasswordRepeat { get; set; } [Required(ErrorMessage = "Division is required")] public String Division { get; set; } } 控制器从哪里调用: [HttpPost] public ActionResult ValidationDemo(RegistrationData model) { if (ModelState.IsValid) { return Redirect("/"); } return View(model); } 所有“开箱即用”验证都能正常运行,只是我的自定义验证没有被调用.在进行调试时,我发现它是在调用构造函数时实例化的,但是在IsValid上设置的断点永远不会被命中. 发生了什么,我该如何解决? UPDATE 好吧,我摆弄了一些,如果我在我的控制器中调用TryUpdateModel(模型),它最终会调用IsValid.所以这对我来说意味着我的自定义属性没有被“注册”任何运行MVC 2中的验证.有没有办法解决这个问题? [HttpPost] public ActionResult ValidationDemo(RegistrationData model) { TryValidateModel(model); // <--- *** Added this line and it "works" if (ModelState.IsValid) { return Redirect("/"); } return View(model); } 解决方法
我看到与MVC2类似/相同/相关的问题 – 只有在所有属性都正确验证时才会调用类级验证.
因此,多个属性可能会失败,并且所有验证消息都会添加到模型状态(并显示在客户端上).但是类级验证消息不在其中;如果属性通过,则仅调用这些上的IsValid.从可用性的角度来看,这有点令人失望,但它确实有效. 我没有调用TryValidateModel(). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- objective-c – 在接口构建器中将列添加到nstableview
- 增加空白时的垃圾值*
- 为OBIEE(Oracle Business Inteligence)添加jasig CAS身份验
- ruby-on-rails – ActiveRecord枚举返回nil,即使它有值
- ruby-on-rails – 过滤器链停止为[:login_required] rende
- xml基础知识(一)
- Facebook iOS SDK没有返回我的应用程序
- 输入一个int型整数,按照从右向左的阅读顺序,返回一个不含
- 想要将Xcode 4用于一切,如何在项目导航器中添加文件夹?
- [实例]UWP之正则获取文本中的超链接到剪切板并粘贴