仅在遇到某种条件时才查看模型属性

时间:2015-10-01 14:08:28

标签: c# asp.net-mvc

我有一个ViewModel,其属性具有多个DataAnnotations属性,包括[Required],我编写的自定义验证器和RegularExpression属性。给定将在ViewModel上设置的某个条件,我该怎样才能使它只在该条件为真时运行set属性验证器?我已经在使用RequiredIf,但这仅适用于[Required]属性。

示例:

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

1 个答案:

答案 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;相关联的值。然后你可以根据它设置你的返回布尔值。

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