自定义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后端技术面试基础汇总
- **反射的用途及实现:** - 用途:在运行时获取类的信息,动态创建对象。 - 实现:通过`Class`类和`Method`、`Constructor`等反射API。
Spring MVC通过添加自定义注解格式化数据的方法
在Spring MVC中,自定义注解是一种强大的工具,允许开发者根据特定需求定制数据处理逻辑。本文将深入探讨如何通过创建自定义注解来格式化数据,以满足特定的业务场景。
简单MVC框架 接口、工厂、反射
最后,反射是.NET Framework提供的一种强大工具,它允许程序在运行时检查自身的信息,如类、属性、方法等,并能动态地创建对象和调用方法。
ASP.NET MVC后台参数验证的几种方式
*** MVC后台参数验证是保障Web应用安全和数据正确性的重要环节,确保用户提交的数据能够满足业务规则和格式要求。
struts2自定义MVC框架
在MVC模式中,模型处理业务逻辑,视图负责数据的展示,而控制器协调模型和视图之间的交互。Struts2允许开发者自定义MVC框架以适应特定项目需求,提高代码的可维护性和可扩展性。


