C# 仅当满足特定条件时才查看模型属性

C# 仅当满足特定条件时才查看模型属性,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个ViewModel,它的属性有几个DataAnnotations属性,包括[必需的],一个我编写的自定义验证器,以及一个RegularExpression属性。给定将在ViewModel上设置的特定条件,如何使其仅在该条件为真时运行set属性验证器?我已经在使用,但这只适用于[必需]属性 例如: [RequiredIf("MyCondition", true, ErrorMessage="BlahBlah")] [RegularExpression("MY_REGULAR_EXPRESS

我有一个ViewModel,它的属性有几个DataAnnotations属性,包括
[必需的]
,一个我编写的自定义验证器,以及一个
RegularExpression
属性。给定将在ViewModel上设置的特定条件,如何使其仅在该条件为真时运行set属性验证器?我已经在使用,但这只适用于
[必需]
属性

例如:

[RequiredIf("MyCondition", true, ErrorMessage="BlahBlah")]
[RegularExpression("MY_REGULAR_EXPRESSION")]
[CustomValidator]
public string MyString { get; set; }

我们通过在url中传递条件并覆盖
AuthroizeCore
来解析特定变量名的url,从而解决了这个问题

您可以这样设置路由(此处为属性路由,但我确信使用路由字典也会起到类似的作用):

<SecureRoleByItemIDAttribute>
<Route("ViewDetails/MoveItem/{itemID:int}/{itemType}")>
包含
Dim itemTypeID
的行以及后面的逻辑是肉和土豆。它在url中搜索与“
itemType
”关联的值,然后您可以根据该值设置返回布尔值


我不确定这在您的特定情况下是否有帮助,但使用它可以做很多巧妙的事情。

我们通过将条件传递给url并覆盖
AuthroizeCore
来解析特定变量名的url,从而解决了这个问题

您可以这样设置路由(此处为属性路由,但我确信使用路由字典也会起到类似的作用):

<SecureRoleByItemIDAttribute>
<Route("ViewDetails/MoveItem/{itemID:int}/{itemType}")>
包含
Dim itemTypeID
的行以及后面的逻辑是肉和土豆。它在url中搜索与“
itemType
”关联的值,然后您可以根据该值设置返回布尔值


我不确定这在您的特定情况下是否有帮助,但使用它可以完成许多整洁的事情。

可能不使用属性并在类上实现IValidatableObject?这比属性提供了更多的灵活性。也许不使用属性并在类上实现IValidatableObject?这比属性提供了更多的灵活性。