加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 使用数据注释进行自定义验证

发布时间:2020-12-16 00:20:31 所属栏目:asp.Net 来源:网络整理
导读:我正在使用数据注释来检查正在输入的数据,但是当涉及更多自定义方式来验证数据时,我陷入了困境. 我需要对数据库运行查询以查看是否存在存在的东西,然后在出现“自定义数据库检查错误”时向用户报告,例如“公司名称已存在” 我如何与dataannotations一起实现
我正在使用数据注释来检查正在输入的数据,但是当涉及更多自定义方式来验证数据时,我陷入了困境.

我需要对数据库运行查询以查看是否存在存在的东西,然后在出现“自定义数据库检查错误”时向用户报告,例如“公司名称已存在”

我如何与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) ...
    ...
}

我能够将我的属性放在获取实体参数的控制器动作上.过滤器操作属性然后检查控制器操作参数(它可以轻松访问其类型和值)并针对正确的参数(在属性定义中提供的类型)运行外部验证器,并在验证失败时填充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
}

这样我就可以仅对那些实际需要它的动作运行外部验证,这种技术也帮助我的控制器动作代码保持干净和简短.我所要做的就是检查是否存在任何模型状态错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读