仅在满足特定条件时查看模型属性
本文关键字:模型 属性 满足 特定条件 | 更新日期: 2023-09-27 18:15:35
我有一个ViewModel,它的属性有几个DataAnnotations属性,包括我编写的自定义验证器[Required]
和RegularExpression
属性。给定将在ViewModel上设置的特定条件,我如何使其仅在该条件为真时运行set属性验证器?我已经使用RequiredIf,但这只适用于[Required]
属性。
的例子:
[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}")>
注意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
和后面的逻辑的行是肉和土豆。它搜索与' itemType
'相关的值的url,然后你可以设置你的返回布尔基于它。
我不确定这是否对你的具体情况有帮助,但是使用它可以做很多整洁的事情。