我有一个ViewModel,其属性具有多个DataAnnotations属性,包括[Required]
,我编写的自定义验证器和RegularExpression
属性。给定将在ViewModel上设置的某个条件,我该怎样才能使它只在该条件为真时运行set属性验证器?我已经在使用RequiredIf,但这仅适用于[Required]
属性。
示例:
[RequiredIf("MyCondition", true, ErrorMessage="BlahBlah")]
[RegularExpression("MY_REGULAR_EXPRESSION")]
[CustomValidator]
public string MyString { get; set; }
答案 0 :(得分:0)
我们通过将条件传递到url并覆盖AuthroizeCore
来解析特定变量名称的URL来解决此问题。
您可以设置路线(此处属性路由,但我确定使用路线词典的工作方式类似),如下所示:
<SecureRoleByItemIDAttribute>
<Route("ViewDetails/MoveItem/{itemID:int}/{itemType}")>
注意itemType
然后在AuthorizeCore
覆盖:
Public Class SecureRoleByItemIDAttribute
Inherits AuthorizeAttribute
Protected Overrides Function AuthorizeCore(httpContext As HttpContextBase) As Boolean
Dim isAuthorized As Boolean = False
Dim itemTypeID = CType(httpContext.CurrentHandler, System.Web.Mvc.MvcHandler).RequestContext.RouteData.Values.Item("itemType")
'set boolean logic here
Return isAuthorized
End Function
End Class
包含Dim itemTypeID
的行和随后的逻辑是肉和土豆。它会在网址中搜索与&#39; itemType
&#39;相关联的值。然后你可以根据它设置你的返回布尔值。
我不确定这对你的具体情况是否有帮助,但是有很多可以用这个做的好事。