asp.net-mvc – DataAnnotations动态附加属性
发布时间:2020-12-15 18:52:08 所属栏目:asp.Net 来源:网络整理
导读:显然,可以在运行时动态地将DataAnnotation属性附加到对象属性,从而实现动态验证。 有人可以在这里提供代码示例吗? 解决方法 MVC有一个钩子提供自己的ModelValidatorProvider。默认情况下,MVC 2使用ModelValidatorProvider的子类,名为DataAnnotationsMod
显然,可以在运行时动态地将DataAnnotation属性附加到对象属性,从而实现动态验证。
有人可以在这里提供代码示例吗? 解决方法
MVC有一个钩子提供自己的ModelValidatorProvider。默认情况下,MVC 2使用ModelValidatorProvider的子类,名为DataAnnotationsModelValidatorProvider,它能够使用System.DataAnnotations.ComponentModel.ValidationAttribute属性进行验证。
DataAnnotationsModelValidatorProvider使用反射查找所有的ValidationAttributes,并简单循环通过集合验证您的模型。所有你需要做的是重写一个名为GetValidators的方法,并从你选择的任何源注入你自己的属性。我使用这种技术进行约定验证,具有DataType.Email属性的属性总是通过正则表达式传递,并使用此技术从数据库中提取信息,以便为“非强力”用户应用更多限制性验证。 以下示例简单说明“始终使任何FirstName属性都必需”: public class CustomMetadataValidationProvider : DataAnnotationsModelValidatorProvider { protected override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata,ControllerContext context,IEnumerable<Attribute> attributes) { //go to db if you want //var repository = ((MyBaseController) context.Controller).RepositorySomething; //find user if you need it var user = context.HttpContext.User; if (!string.IsNullOrWhiteSpace(metadata.PropertyName) && metadata.PropertyName == "FirstName") attributes = new List<Attribute>() {new RequiredAttribute()}; return base.GetValidators(metadata,context,attributes); } } 所有你需要做的是在Global.asax.cs文件中注册提供程序: protected void Application_Start() { ModelValidatorProviders.Providers.Add(new CustomMetadataValidationProvider()); AreaRegistration.RegisterAllAreas(); RegisterRoutes(RouteTable.Routes); } 最终结果: 与此型号: public class Person { public string FirstName { get; set; } public string LastName { get; set; } public DateTime Birthday { get; set; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 允许asp.net mvc 2控制器名称的URL中的连字
- IBatis.Net 老技术新研究
- asp.net – 如何崩溃App Pool?
- 为什么我的asp.net应用程序抛出ThreadAbortException?
- asp.net-mvc – 如何在ASP.NET MVC中存根User.Identity.Nam
- asp.net – 过程或函数’xyz’指定了太多参数
- 实现ASP.NET MVC应用程序的全文搜索的最佳方法是什么?
- asp.net – 无法将’System.Web.Profile.DefaultProfile’类
- 日志记录 – ASP.NET MVC 4 Web Api:诊断功能
- asp.net-mvc – 从asp.net mvc控制器返回一个js文件
推荐文章
站长推荐
- asp.net-mvc – 在实体框架代码中为同一表定义多
- asp.net-mvc – ASP.NET MVC WebSite中的ERR_EMP
- asp.net-mvc – 在Asp.net MVC视图中全局添加“<
- asp.net-mvc – 渲染位于远程服务器上的部分视图
- asp.net-mvc – System.Web.HttpRequestBase不包
- IIS 7.5上的.Net 4.5 WCF错误404.3
- asp.net-mvc – LINQ到EF有什么问题?
- asp.net – 解析美国邮政地址的免费API?
- asp.net-mvc – RedirectToAction导致在ASP.NET
- ASP.NET Web API内存中测试中的内部服务器错误
热点阅读