我的所有控制器在課堂上都有這樣的代碼。ASP.NET MVC3,如何設置可以在Controller和Model中使用的全局變量?
public class TestController : Controller
{
//
// GET: /Reports/
string userName;
string uid;
string accountType;
int companyCode;
protected override void Initialize(RequestContext requestContext)
{
base.Initialize(requestContext);
string cookieName = FormsAuthentication.FormsCookieName;
HttpCookie authCookie = Request.Cookies[cookieName];
if (authCookie != null)
{
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
string userData = authTicket.UserData;
JavaScriptSerializer serializer = new JavaScriptSerializer();
var userInfo = serializer.Deserialize<MemberModel>(userData);
userName = userInfo.firstName + " " + userInfo.lastName;
uid = userInfo.uid;
accountType = userInfo.accountType;
companyCode = userInfo.companyCode;
}
}
因爲每個控制器都需要擁有cookie中的用戶信息。
我認爲這是不正確的方式寫在每個控制器的代碼。
此外,即使我不能在我的模型中使用該方法。
base.Initialize(requestContext); <= 'object' does not contain a definition for 'Initialize'
所以,我想知道如何將該方法設置爲GLOBAL變量以用於任何控制器和模型。
有人知道,請諮詢我〜
[編輯]
謝謝!
[編輯]
我在HomeController的定義如上述代碼,並試圖調用的userName中的TestController。 但它是空的。 (錯誤現在已經不復存在)
在的TestController,
[HttpGet]
public void test()
{
Response.Write(MemberModelProvider.UserName);
Response.Write(System.Web.HttpContext.Current.Items["UserName"]);
}
其打印什麼...
我在做什麼錯?
非常感謝您的幫助!
你爲什麼不寫一個處理這個問題的類? –
是的,那也是好方法。但該類不能位於模型中,因爲它會產生錯誤。那麼該類應該放在哪裏,以及如何修復該方法以使模型可以使用該方法? –