asp.net-mvc – 流畅的验证自定义验证规则
我有模特:
[Validator(typeof(RegisterValidator))] public class RegisterModel { public string Name { get; set; } public string Email { get; set; } public string Password { get; set; } public string ListOfCategoriess { get; set; } } 和模型验证器: public class RegisterValidator:AbstractValidator<RegisterModel> { public RegisterValidator(IUserService userService) { RuleFor(x => x.Name).NotEmpty().WithMessage("User name is required."); RuleFor(x => x.Email).NotEmpty().WithMessage("Email is required."); RuleFor(x => x.Email).EmailAddress().WithMessage("Invalid email format."); RuleFor(x => x.Password).NotEmpty().WithMessage("Password is required."); RuleFor(x => x.ConfirmPassword).NotEmpty().WithMessage("Please confirm your password."); } } 我有验证工厂,应该解决依赖: public class WindsorValidatorFactory : ValidatorFactoryBase { private readonly IKernel kernel; public WindsorValidatorFactory(IKernel kernel) { this.kernel = kernel; } public override IValidator CreateInstance(Type validatorType) { if (validatorType == null) throw new Exception("Validator type not found."); return (IValidator) kernel.Resolve(validatorType); } } 我有IUserService,它有方法IsUsernameUnique(字符串名称)和IsEmailUnique(字符串电子邮件)`并且想在我的验证器类中使用它(模型只有在具有唯一用户名和电子邮件时才有效). >如何使用我的服务进行验证? 解决方法
您可以使用必须规则: RuleFor(x => x.Email) .NotEmpty() .WithMessage("Email is required.") .EmailAddress() .WithMessage("Invalid email format.") .Must(userService.IsEmailUnique) .WithMessage("Email already taken");
不,每个属性只能有一种验证类型
您可以使用必须规则: RuleFor(x => x.Password) .Must(password => SomeMethodContainingCustomLogicThatMustReturnBoolean(password)) .WithMessage("Sorry password didn't satisfy the custom logic");
是的,一点没错.您的控制器操作可能如下所示: [HttpPost] public ActionResult Register(RegisterModel model) { if (!ModelState.IsValid) { // validation failed => redisplay the view so that the user // can fix his errors return View(model); } // at this stage the model is valid => process it ... return RedirectToAction("Success"); } 更新:
当然是: RuleFor(x => x.ConfirmPassword) .Equal(x => x.Password) .WithMessage("Passwords do not match"); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 一个新的ASP.NET MVC 5应用程序如何知道如何创建数据库,以及
- 在ASP.NET中使用Web API而不是Web方法有什么优势
- 为什么ASP.Net重写runat = server锚控件的相对路径?
- asp.net-mvc-5 – 在MVC 5期货中找不到Html.Serialize助手
- asp.net-mvc-4 – MVC 4 – EF模型w / Spaces
- 如何在.NET ASP C#中正确使用QueryString?
- asp.net-mvc-3 – SSL会在我的asp.net mvc3 web应用程序中加
- asp.net-mvc – Asp.Net MVC 2 Html.TextBoxFor为模型的Dat
- ASP.NET MVC与Webforms:替换WebForms控件
- asp.net – 对于在Azure部署的Web.config中存储密码的正确程
- asp.net-mvc – 用于Bookmarked Angular SPA URL
- asp.net – System.Web.Security.MembershipProv
- asp.net-mvc – ViewBag分配
- asp.net-mvc – 对于MVC,REST是强制性的吗?
- asp.net – 您实际可以拥有多少应用程序会话数据
- ASP.NET MVC下的四种验证编程方式
- asp.net core 2.0 Microsoft.Extensions.Logging
- asp.net-mvc – 仅使用Entity Framework更新已修
- JSON字符串反序列化成对象_部分属性值反序列化失
- ASP.NET 打开新页面或页面跳转