Asp.net mvc 如何从会话中检索会话变量?

Asp.net mvc 如何从会话中检索会话变量?,asp.net-mvc,session,Asp.net Mvc,Session,我想在控制器中创建会话,如下所示: Session["UserName"] = username 在我的另一个控制器中,我希望检索此名称,但当我写入: string username = (string)Session["UserName"] 它是“空的” 为什么会这样? 编辑 为什么有时我可以检索会话[“UserName”],有时这个变量不存在。发生了什么事?您正在使用HttpSessionStateBase控制器会话吗 尝试使用System.Web.HttpContext.Current

我想在控制器中创建会话,如下所示:

Session["UserName"] = username
在我的另一个控制器中,我希望检索此名称,但当我写入:

string username = (string)Session["UserName"]
它是“空的”

为什么会这样? 编辑


为什么有时我可以检索会话[“UserName”],有时这个变量不存在。发生了什么事?

您正在使用HttpSessionStateBase控制器会话吗

尝试使用
System.Web.HttpContext.Current.Session[“UserName”]

进一步检查配置中的


希望这有帮助。

请粘贴一些更相关的代码。这两种操作方法将更好地满足。。。在登录方法中,在会话[“Username”]处放置断点。。。。行并查看model.UserName是什么。。。看起来像是绑定问题您确定
per[0]==“true”
并且您确实输入了将值存储在会话中的
if
条件吗?@DarinDimitrov是的,这是我的第二个猜测
[HttpPost]
    public ActionResult Login(LogOnModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            string[] per = MvcA.Controllers.RuleUsers.ValidateUserAndRole(model.UserName, model.Password);
            if (per[0]=="true")

            {
                Session["Role"]=per[1];
                Session["UserName"] = model.UserName;

                if (Url.IsLocalUrl(returnUrl))
                {
                    return Redirect(returnUrl);
                }
                else
                {
                    return RedirectToAction("Index", "Home");
                }
            }
            else
            {
                ModelState.AddModelError("", "Wrong");
            }
        }
        return View(model);
    }    


  public ActionResult Add(SellsLiveAdd Per)
    {
        string ses = (string)(Session["UserName"]);
.....