![]() |
1
4
这实际上是 how to get the instance decorated by an attribute, from the attribute (类似问题 here ) 不幸的是,简短的回答是:你不能。 属性 是 元数据。属性不知道和 不能 了解它所修饰的类或成员的任何信息。由类的一些下游使用者来查找所述自定义属性并决定是否/何时/如何应用它们。 你必须把属性想成 数据 不是 物体 . 尽管属性在技术上是类,但它们相当愚蠢,因为它们有一个关键的约束:关于它们的所有内容都必须在编译时定义。这实际上意味着他们无法访问任何运行时信息, 除非 它们公开采用运行时实例的方法 和 调用方决定调用它。 你可以做后者。您可以设计自己的属性,只要控制验证器,就可以让验证器对该属性调用一些方法,并让它执行几乎所有操作:
只要任何人正确使用这个类的属性,这将起作用:
如果你是这样 消费 这些属性可以很容易地实现您自己的:
这一切都很好,只是控制流与您在原始问题中指定的相反。该属性不知道它应用于什么;验证程序 使用 属性必须提供该信息(它很容易做到)。
当然,这不是验证在MVC 2中如何与数据注释一起实际工作的(除非在我上次查看它之后它发生了显著的变化)。我想你不能把这个插上
这可能不是您要寻找的答案,但不幸的是,它是这样的;除非验证程序本身提供了该信息,否则验证属性无法知道它应用到的类。 |
![]() |
Dexter404 · 在特性网格c中使用显示数据注释# 7 年前 |
![]() |
chamara · 正则表达式只允许数字、逗号和破折号 7 年前 |
![]() |
Steve · 用于DataAnnotations本地化的单个资源文件 7 年前 |
![]() |
JadedEric · EF实体上的数据注释突然停止工作 7 年前 |
![]() |
Ashita Shah · 验证程序要求的表达性注释出错 8 年前 |
![]() |
Offir · 显示正则表达式正确的错误消息 9 年前 |
![]() |
jezzipin · 使用正则表达式验证信用卡月份和年份 9 年前 |