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 = ""

だから、なぜこれ?すべてのコントローラー内でセッション変数をグローバルに設定する方法は??

4

2 に答える 2

0

これが私が問題を解決した方法です

これが最善の方法ではないことはわかっていますが、助けになりました:

まず、次のようにベースコントローラーを作成しました

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

次に、すべてのコントローラーのコードを他のコントローラーに変更して、ベースコントローラークラスから継承できるようにしました。

次に、「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() : "";

今では機能し、セッション変数はすべてのコントローラーを通過できます。

于 2013-04-25T13:05:38.403 に答える
0

このような動作には 2 つの理由しか考えられません。1 つ目はセッションが終了したこと、2 つ目はアプリケーションの別の場所からセッション変数を書き換えたことです。追加のコードがなければ、これ以上言うことはありません。

于 2013-04-25T11:04:52.613 に答える