用数据说明自定义验证
-
19-09-2019 - |
题
我用数据说明,检查就是BEING输入的数据,但我坚持,当涉及到更多的自定义的方式来验证数据。
我需要在其上运行的数据库查询,看看是否存在的东西有或没有,然后报告给用户,如果“自定义数据库检查错误”,如“公司名称已经存在”
我怎样才能与dataannotations一起实现这样的事?
我所有查询使用LINQ和实体框架附带3.5SP1进行等
/ M
解决方案
扩展数据注解
自定义属性
您必须编写您自己的属性,会做你的对象实例验证针对数据存储。
请确保你的类继承System.ComponentModel.DataAnnotations.ValidationAttribute
类:
public class MustNotExist: ValidationAttribute
{
...
}
注意
当我需要验证的对象是数据存储器内唯一我碰到一个类似的情况。但是,这种验证是不可能对实体类本身,因为它应该只对正在创建的,但不是当你从数据存储已经回到你的实体的实体工作。
我的解决办法是有一个单独的接口,类和属性。
public interface IExternalValidator ...
class DBUniqueValidator: IExternalValidator ...
class ValidateExternallyAttribute: FilterAttribute, IActionFilter
{
...
public ValidateExternallyAttribute(Type validatorType, Type entityType) ...
...
}
我能够把我的属性上得到实体参数控制器动作。滤波器action属性然后检查控制器动作的参数(它可以很容易地访问他们的类型和值)和(在属性定义中提供的类型)执行针对正确的参数外部确认和验证失败时填充的ModelState错误。
[ValidateExternally(typeof(DBUniqueValidator), typeof(User))]
public ActionResult RegisterUser(User newUser)
{
if (!this.ModelState.IsValid)
{
// act accordingly - probably return some error depending on model state errors
}
// register new user in data store
}
这样我可以只在真正需要它的行动运行外部的验证,这种技术也帮助我的控制器操作的代码保持干净和短。所有我必须做的是检查是否有任何模型状态错误。
不隶属于 StackOverflow