自定义MVC数据验证属性,如何通过反射动态创建表达式树
public class OnlyOneAttribute : ValidationAttribute
{
public OnlyOneAttribute()
{
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
using (var context = new EfDbContext())
{
//验证属性父对象的类型
var type = validationContext.ObjectType;
//获取该类型的仓储类型
var typeRepository = typeof (EfRepository<>);
var genericType = typeRepository.MakeGenericType(type);
//获取该类型的仓储对象 EfRepository<Student>
var o = Activator.CreateInstance(genericType, context);
//FirstOrDefault参数的表达树 需要修改的地方
var expressionType = typeof (Expression<Func<Student, bool>>);
//获取对应参数的FirstOrDefault方法
var method = genericType.GetMethod("FirstOrDefault",new Type[] { expressionType });
//表达式 需要修改的地方
Expression<Func<Student, bool>> func = (s) => s.UserName == value.ToString();
var result = method.Invoke(o, new object[] {func});
if (result != null)
{
var errorMessage = FormatErrorMessage(validationContext.DisplayName);
return new ValidationResult(errorMessage);
}
}
return ValidationResult.Success;
}
}
把表达式树改成动态创建,根据特性使用的类和属性。表达式树没研究过...一下就搞反射表达式树,被搞的一头雾水,求指点

...全文
相关推荐
Java后端技术面试基础汇总
java后端基础知识企业常见面试题汇总,适合1-3年新人.......
Spring MVC通过添加自定义注解格式化数据的方法
主要给大家介绍了关于Spring MVC通过添加自定义注解格式化数据的方法,文中先对springmvc 自定义注解 以及自定义注解的解析进行了详细的介绍,相信会对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
简单MVC框架 接口、工厂、反射
简单MVC框架。 采用接口调用,数据工厂动态加载程序集。 模型、数据提供器、控制器、视图层次清晰。
ASP.NET MVC后台参数验证的几种方式
本篇文章主要介绍了ASP.NET MVC后台参数验证的几种方式 ,具有一定的参考价值,有兴趣的可以了解一下。
struts2自定义MVC框架
主要为大家详细介绍了struts2如何自定义MVC框架,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


