2013-04-25 39 views
0

我的MVC項目存在問題!我們的目標是建立一個會話變種,以便將它傳遞給所有控制器: 我xUserController內,會話變量在兩個不同的控制器之間仍然爲空

  Session["UserId"] = 52; 
      Session.Timeout = 30; 

      string SessionUserId = ((Session != null) && (Session["UserId"] != null)) ? Session["UserId"].ToString() : ""; 

// SessionUserId = 「52」

但ChatMessageController內

[HttpPost] 
public ActionResult AddMessageToConference(int? id,ChatMessageModels _model){ 

     var response = new NzilameetingResponse(); 
     string SessionUserId = ((Session != null) && (Session["UserId"] != null)) ? Session["UserId"].ToString() : ""; 
//... 

     } 
     return Json(response, "text/json", JsonRequestBehavior.AllowGet); 
} 

SessionUserId =「」

那麼,爲什麼呢?如何在所有控制器中將會話變量設置爲全局?

+0

會話varialbe是全球唯一 – Devesh 2013-04-25 09:34:47

+0

當然,但你怎麼解釋SessionUserId =「」在其他控制器?我必須寫什麼? – Bellash 2013-04-25 09:41:18

+0

您使用哪種瀏覽器? – Sharun 2013-04-25 09:59:06

回答

0

這是我如何解決這個問題

我知道這是不是做的最好的方式,但它幫助我:

首先,我創建了一個基本的控制器如下

public class BaseController : Controller 
{ 
    private static HttpSessionStateBase _mysession; 
    internal protected static HttpSessionStateBase MySession { 
     get { return _mysession; } 
     set { _mysession = value; } 
    } 
} 

然後我更改了其他所有控制器的代碼,讓它們從Base Controller類繼承。

然後我推翻了「OnActionExecuting」的方法如下:

public class xUserController : BaseController 
{ 
    protected override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     BaseController.MySession = Session; 
     base.OnActionExecuting(filterContext); 
    } 
    [HttpPost] 
    public ActionResult LogIn(FormCollection form) 
    { 
     //---KillFormerSession(); 
     var response = new NzilameetingResponse(); 
     Session["UserId"] = /*entity.Id_User*/_model.Id_User; 
     return Json(response, "text/json", JsonRequestBehavior.AllowGet); 
    } 
} 

最後,我已經改變了我呼叫會話變量的方法。

string SessionUserId = ((BaseController.MySession != null) && (BaseController.MySession["UserId"] != null)) ? BaseController.MySession["UserId"].ToString() : ""; 

代替

string SessionUserId = ((Session != null) && (Session["UserId"] != null)) ? Session["UserId"].ToString() : ""; 

現在的作品和我的會話增值經銷商可以在所有控制器行走。

0

這種行爲可能只有兩個原因:第一個原因是您的會話已結束,第二個原因是您從應用程序中的其他位置重寫了會話變量。沒有任何額外的代碼,沒有什麼可說的。

+0

不!請看我的答案,我是如何解決它的 – Bellash 2013-04-25 13:07:53

相關問題