2012-07-06 45 views
0

我正在創建一個帶有Windows身份驗證的MVC Intranet應用程序。被訪問的數據是特定年份的,所以我需要一種方法來設置一個全局變量,無論是否是會話,或其他什麼,必須在執行任何查詢之前設置。MVC3「全局變量」

我一直無法找到一種方法來強制用戶登錄,因爲他們已經通過他們的Windows登錄憑據授權,所以使用屬性強制登錄似乎有問題。

我發現用戶可以導航到任何特定的頁面,並嘗試拉取數據,並創建一個沒有定義年份的破壞。

我想要做的是強制用戶選擇年份選擇頁面,選擇他們希望訪問的年份,如果年份變量尚未設置。

我查看了相關的問題,他們似乎沒有提供我目前遇到的難題的答案。

+0

_I've沒有能夠找到一種方法來強制用戶登錄,因爲他們已授權通過自己的窗口,以便使用屬性強制登錄登錄憑據似乎problematic_ - 的'[授權]'屬性仍適用。他們將被提示登錄,如果他們沒有被授權或不屬於所需的組。 – jrummell 2012-07-06 14:47:26

+0

我對特定組有特定操作,但Intranet上的所有用戶都可以查看訪問權限。 [授權]屬性似乎並沒有阻止用戶訪問任何頁面和操作。因此,如果他們能夠訪問我們域中的用戶,那麼登錄名是如何被強制的?我對MVC還是比較新的,所以我可能很容易錯過很多。 – Erik 2012-07-06 14:59:51

+0

您可能錯過了['Roles'](http://msdn.microsoft.com/zh-cn/library/system.web.mvc.authorizeattribute.roles(v = vs.98).aspx)屬性。 – jrummell 2012-07-06 15:03:47

回答

1

你可以編寫一個自定義的ActionFilter,它放在你的所有控制器上(當然不是你必須選擇年份的動作)。如果未選擇年份,則您將重定向到您可以選擇年份的控制器/操作。

public class CheckYearAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if(<YEAR IS NOT SET>)//redirect 
     { 
      filterContext.Result = new RedirectToRouteResult(
       new RouteValueDictionary {{ "Controller", "YourController" }, 
             { "Action", "YourAction" } }); 
     } 

     base.OnActionExecuting(filterContext); 
    } 
} 
+0

謝謝你。這看起來不錯,看看是否設定了一年,但我應該用什麼來設定年?一個ViewBag對象?會話變量?謝謝! – Erik 2012-07-06 15:02:10

+0

@Erik是的,會話會很好。 – 2012-07-06 15:05:15

+0

非常感謝您的幫助。 – Erik 2012-07-06 15:11:28