仅在满足特定条件时查看模型属性

本文关键字:模型 属性 满足 特定条件 | 更新日期: 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,然后你可以设置你的返回布尔基于它。

我不确定这是否对你的具体情况有帮助,但是使用它可以做很多整洁的事情。