根据日期限制Mvc 3动作链接或功能

时间:2011-10-26 01:49:49

标签: asp.net-mvc vb.net asp.net-mvc-3

我有一个mvc 3 vb.net razor应用程序,如果未在预设的月/日/年范围范围内点击链接,我需要将视图重定向到另一个操作...这需要限制学校学期的注册只能在开放注册日期和结束注册日期之间进行......我想我可以简单地将其作为控制器功能以If语句或精选案例的形式进行。然后根据日期的条件使用重定向......是否有一些简单的短代码用于执行此测试...我的日期变量是OpenDate和EndDate。我认为它可能接近

Dim OpenDate as date = mm/dd/yy 
Dim CloseDate as date = mm/dd/yy

If system.datetime.now.toshortdatestring < OpenDate Then
Return RedirecttoAction ("Too Soon")
ElseIf system.datetime.now.toshortdatestring > CloseDate Then
Return RedirecttoAction ("Too Late")
Else
Return View()
End If

这看起来不错还是有更简单的方法???

2 个答案:

答案 0 :(得分:1)

我会写一个自定义授权属性:

Public Class MyAuthorizeAttribute
    Inherits AuthorizeAttribute

    Private ReadOnly _openDate As DateTime
    Private ReadOnly _closeDate As DateTime

    Public Sub New(openDate As String, closeDate As String)
        _openDate = DateTime.ParseExact(openDate, "dd/MM/yyyy", CultureInfo.InvariantCulture)
        _closeDate = DateTime.ParseExact(closeDate, "dd/MM/yyyy", CultureInfo.InvariantCulture)
    End Sub

    Protected Overrides Function AuthorizeCore(httpContext As HttpContextBase) As Boolean
        Dim now = DateTime.Now
        If now < _openDate Then
            httpContext.Items("actionToRedirectTo") = "toosoon"
            Return False
        End If
        If now > _closeDate Then
            httpContext.Items("actionToRedirectTo") = "toolate"
            Return False
        End If

        Return True
    End Function

    Protected Overrides Sub HandleUnauthorizedRequest(filterContext As AuthorizationContext)
        Dim values = New RouteValueDictionary(New With { _
         Key .action = filterContext.HttpContext.Items("actionToRedirectTo"), _
         Key .controller = "somecontroller" _
        })
        filterContext.Result = New RedirectToRouteResult(values)
    End Sub
End Class

然后简单地用它来装饰需要这种逻辑的控制器动作:

<AuthorizeRegistration("01/11/2011", "01/12/2011")>
Function Register() As ActionResult
    Return View()
End Function

通过这种方式,您可以在需要此类保护的不同操作上重复使用它。

答案 1 :(得分:0)

您希望按日期限制学期的注册,因此注册的给定日期应该有效 - 这是一个验证问题,因此您应该使用错误消息实现验证,而不是重定向特殊视图。

您可以将模型上的Range(System.ComponentModel.DataAnnotations)属性用于您的目的。如果您需要更多动态值进行日期范围验证,则应编写自己的自定义验证属性。