gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:29:10 25 4
gpt4 key购买 nike

我正在使用数据注释来检查正在输入的数据,但是当涉及到更自定义的数据验证方式时,我被卡住了。

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

如何与数据注释一起实现这样的事情?

我使用 3.5sp1 附带的 linq 和 Entity Framework 完成了所有查询等

/米

最佳答案

扩展数据注释的自定义属性

您将必须编写自己的属性,这些属性将针对数据存储验证您的对象实例。

确保你的类继承 System.ComponentModel.DataAnnotations.ValidationAttribute类(class):

public class MustNotExist: ValidationAttribute
{
...
}

警告

当我需要验证对象在数据存储中是否唯一时,我遇到了类似的情况。但是这种验证在实体类本身上是不可能的,因为它应该只适用于那些正在创建的实体,而不是当你已经从数据存储中返回你的实体时。

我的解决方案是有一个单独的接口(interface)、类和属性。
public interface IExternalValidator ...

class DBUniqueValidator: IExternalValidator ...

class ValidateExternallyAttribute: FilterAttribute, IActionFilter
{
...
public ValidateExternallyAttribute(Type validatorType, Type entityType) ...
...
}

我能够将我的属性放在获取实体参数的 Controller 操作上。过滤 Action 属性然后检查 Controller 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
}

通过这种方式,我能够只对那些真正需要它的操作运行外部验证,而且这种技术还帮助我的 Controller 操作代码保持简洁。我所要做的就是检查是否有任何模型状态错误。

关于asp.net-mvc - 使用数据注释进行自定义验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1905777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com