我正在使用帶有Razor視圖的ASP.NET MVC 3。我有一個控制器中有兩個操作方法(Get和Post),它們有一個相應的視圖(.cshtml文件)。在我的應用程序中,我只想在一年的特定時間允許訪問該視圖,我們稱之爲「可訪問的日期範圍」。在所有時間不在可訪問的日期範圍內,我希望應用程序向用戶提供錯誤消息而不是顯示頁面。什麼是這樣的好方法?在控制器方法上可以使用自定義屬性嗎?邏輯應該直接在兩個控制器方法中進行嗎?我應該只在視圖文件中使用if
語句以及適當的邏輯嗎?我並不瘋狂把這個邏輯放在一個視圖文件中,並且想要一個更乾淨的選項的建議。ASP.NET MVC 3基於一年中的時間/可訪問日期範圍限制對視圖的訪問
2
A
回答
1
最簡單的答案是把邏輯控制器內:
public ActionResult SummerOnly()
{
if (!(DateTime.Now > new DateTime(2012,8,8)))
return View("Error");
return View("GoodView");
}
1
您可以創建一個自定義屬性,但我的偏好是將邏輯放入控制器中。我只傾向於使用自定義屬性,如果我知道這是我將在應用程序內反覆使用的東西。
然後,它是一個簡單的情況,檢查日期是否在特定的日期,然後發射到不同的視圖取決於結果。
它不應該在視圖中,因爲我認爲你已經從你的問題中知道。
1
要做到這一點最簡單的方法是將邏輯放在操作方法中。當然,不要這麼做,因爲這不是觀點的責任。你可以爲此創建一個屬性,如果你打算重用它,我肯定會走這條路線,否則我會保持簡單,只需將邏輯放在動作方法中。
0
對於一次性使用的話,那麼一個屬性是矯枉過正,但如果你確實需要重用的邏輯那麼屬性是理想。事情是這樣的:
public class RestrictDate : ActionFilterAttribute
{
private int _monthFrom ;
private int _monthTo;
private int _dayFrom = 1;
private int _dayTo = 0;
public RestrictDate(int monthFrom, int monthTo)
{
_monthFrom = monthFrom;
_monthTo = monthTo;
}
public RestrictDate(int monthFrom, int dayFrom, int monthTo, int dayTo)
: this(monthFrom, monthTo)
{
_dayFrom = dayFrom;
_dayTo = dayTo;
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
DateTime minDate = new DateTime(DateTime.Today.Year, _monthFrom, _dayFrom);
int interval = _monthFrom <= _monthTo ? _monthTo - _monthFrom : 12 - _monthFrom + _monthTo;
DateTime maxDate;
if (_dayTo == 0)
{
maxDate = minDate.AddMonths(interval + 1).AddDays(-1);
}
else
{
maxDate = new DateTime(DateTime.Today.Year, _monthFrom, 1).AddMonths(interval).AddDays(_dayTo - 1);
}
if (DateTime.Today < minDate || DateTime.Today > maxDate)
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new
{
controller = "Home",
action = "Error"
}));
}
base.OnActionExecuting(filterContext);
}
}
很顯然,這是不是生產準備代碼 - 不存在輸入驗證等,但我認爲你的想法。
相關問題
- 1. ASP.NET MVC 3限制API訪問
- 2. 限制訪問查詢的日期範圍
- 3. 限制對通用視圖的訪問
- 4. MS訪問選擇數據比日期時間範圍時
- 5. 從訪問中的日期時間字段中選擇時間範圍
- 6. 訪問下一篇:基於日期
- 7. SELECT對SQL 2005視圖的訪問權限對底層表的限制訪問
- 8. 訪問2007預測日期範圍
- 9. 通過IP範圍限制訪問(PHP)
- 10. 基於抵達日期值的限制日期範圍
- 11. MVC限制對訪問一些動作
- 12. 重複訪問的SQL時間範圍
- 13. Django基於日期的通用視圖:如何訪問變量
- 14. 限制基於wifi的網站訪問
- 15. 訪問的範圍
- 16. 限制訪問MVC操作
- 17. asp.net mvc - 限制訪問網頁
- 18. ASP.NET MVC:使用URL限制訪問
- 19. 限制訪問控制方法在ASP.NET MVC 3
- 20. 如何訪問ASP.NET MVC 3中的AntiForgery.GetTokens()?
- 21. ASP.NET MVC中的數據訪問3
- 22. ASP.NET MVC中的數據庫訪問3
- 23. 如何限制對ASP.NET MVC中某些頁面的訪問?
- 24. 如何在ASP.NET MVC中限制對[HttpGet] ActionResult的訪問?
- 25. 如何控制對ASP.Net MVC 3視圖上表單字段的訪問?
- 26. asp.net的MVC LINQ日期時間問題
- 27. 麻煩從NG-視圖訪問$範圍
- 28. 根據IP範圍限制對Active Directory的訪問
- 29. 訪問父範圍對象
- 30. ASP.NET MVC:訪問日誌
感謝大家的快速回復。聽起來像你們(John H,Mark Oreta和KingCronus)一致。首先回應接受的答案,但我讚賞其他人的補充評論。 – neizan 2012-08-07 12:59:52