Asp.net mvc 基于日期限制Mvc 3操作链接或功能
我有一个mvc 3 vb.net razor应用程序,如果在预设的月/日/年范围内没有点击链接,我需要将视图重定向到其他操作。。。这是需要限制一个学期的注册只能在开放注册日期和结束注册日期之间进行。。。我想我可以简单地将其以If语句或select case的形式放入控制器函数中,然后根据日期条件使用重定向。。。。。。是否有一些简单的短代码用于执行此测试。。。我的日期变量是OpenDate和EndDate。我想这可能是一件很相似的事情Asp.net mvc 基于日期限制Mvc 3操作链接或功能,asp.net-mvc,vb.net,asp.net-mvc-3,Asp.net Mvc,Vb.net,Asp.net Mvc 3,我有一个mvc 3 vb.net razor应用程序,如果在预设的月/日/年范围内没有点击链接,我需要将视图重定向到其他操作。。。这是需要限制一个学期的注册只能在开放注册日期和结束注册日期之间进行。。。我想我可以简单地将其以If语句或select case的形式放入控制器函数中,然后根据日期条件使用重定向。。。。。。是否有一些简单的短代码用于执行此测试。。。我的日期变量是OpenDate和EndDate。我想这可能是一件很相似的事情 Dim OpenDate as date = mm/dd/yy
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
Dim OpenDate as date=mm/dd/yy
Dim CloseDate as date=年月日
如果system.datetime.now.ToSortDateStringCloseDate Then
返回重定向到操作(“太晚”)
其他的
返回视图()
如果结束
这看起来不错还是有更简单的方法??我会编写一个自定义授权属性:
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
公共类属性
继承属性
私有只读\u openDate作为日期时间
私有只读\u closeDate作为日期时间
Public Sub New(openDate作为字符串,closeDate作为字符串)
_openDate=DateTime.ParseExact(openDate,“dd/MM/yyyy”,CultureInfo.InvariantCulture)
_closeDate=DateTime.ParseExact(closeDate,“dd/MM/yyyy”,CultureInfo.InvariantCulture)
端接头
受保护的重写函数AuthorizeCore(httpContext作为HttpContextBase)为布尔值
Dim now=DateTime.now
如果现在<\u打开日期,则
httpContext.Items(“ActionToRedirecto”)=“toosoon”
返回错误
如果结束
如果现在>\u关闭日期,则
httpContext.Items(“ActionToRedirecto”)=“toolate”
返回错误
如果结束
返回真值
端函数
受保护的覆盖子HandleUnauthorizedRequest(filterContext作为授权上下文)
Dim values=新的RouteValueDictionary(使用{_
Key.action=filterContext.HttpContext.Items(“ActionToDirectTo”)_
Key.controller=“somecontroller”_
})
filterContext.Result=新的RedirectToRouteResult(值)
端接头
末级
然后简单地用它装饰需要这种逻辑的控制器动作:
<AuthorizeRegistration("01/11/2011", "01/12/2011")>
Function Register() As ActionResult
Return View()
End Function
函数Register()作为ActionResult
返回视图()
端函数
通过这种方式,您可以在需要此类保护的不同操作上重复使用它。您希望按日期限制学校学期的注册,因此给定的注册日期应该有效-这是一个验证问题,因此您应该使用错误消息实现go for validation,而不是重定向特殊视图 出于您的目的,您可以在模型上使用Range(System.ComponentModel.DataAnnotations)属性。如果日期范围验证需要更多的动态值,则应编写自己的自定义验证属性