asp.net-mvc – DataAnnotations动态附加属性
发布时间:2020-05-23 10:45:38 所属栏目:asp.Net 来源:互联网
导读:显然,可以在运行时动态地将DataAnnotation属性附加到对象属性,从而实现动态验证。 有人可以在这里提供代码示例吗? MVC有一个钩子提供自己的ModelValidatorProvider。默认情况下,MVC 2使用ModelValidatorProvider的子类,名为DataAnnotationsModelValidato
|
显然,可以在运行时动态地将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 – 如何在web.config中增加执行sql查询的时间
- asp.net-mvc-routing – 在.NET MVC 4.0 URL结构中强制使用
- asp.net – 配置节“system.servicemodel”无法读取,因为它
- asp.net – 如何添加ROW_NUMBER到LINQ查询或实体?
- 从ASP.NET MVC返回null时,jQuery post JSON失败
- asp.net-mvc – 如何在asp.net mvc中提交下拉列表
- asp.net – 使用UpdatePanel的CollectionPager问题
- 有AsIFnet标记的#IF DEBUG吗?
- 在经典ASP调试的Visual Studio 2012中禁用了应用程序调试
- 使用ASP.NET AJAX Control Toolkit设置焦点
推荐文章
站长推荐
- asp.net-mvc – 最佳实践:在web api控制器中处理
- asp.net-mvc – 在ASP .NET MVC 3中使用XSLT
- asp.net-mvc – ASP.NET MVC 3 Beta 1 Block访问
- asp.net-core – 将命名空间添加到ASP.NET MVC 6
- asp.net-mvc-3 – 在ASP.NET MVC 3中覆盖/禁用授
- asp.net – 防止页面在回发后滚动
- asp.net – 转义HTML实体并避免WebForm标签中的H
- asp.net-mvc – 为什么我不能从Web平台安装程序安
- asp.net-mvc – 带MVC结果的Response.Flush无效
- asp.net – Visual Studio 2008 – 解决方案的条
热点阅读
