C# 在MVC视图中使用会话变量的简单答案?

C# 在MVC视图中使用会话变量的简单答案?,c#,asp.net-mvc,visual-studio-2012,session-variables,asp.net-mvc-views,C#,Asp.net Mvc,Visual Studio 2012,Session Variables,Asp.net Mvc Views,我在MVC视图中使用会话变量时遇到困难。在下面的示例中,当我通过控制器将IsLoggedIn会话变量设置为true时,视图中的If条件不满足。注意:为了便于阅读,我删减了一些不相关的代码。提前谢谢 控制器: public ActionResult Index(int id = 0) { JobSummaryModelHelper jobDetails = new JobSummaryModelHelper(); jobDetails.Id = id

我在MVC视图中使用会话变量时遇到困难。在下面的示例中,当我通过控制器将IsLoggedIn会话变量设置为true时,视图中的If条件不满足。注意:为了便于阅读,我删减了一些不相关的代码。提前谢谢

控制器:

    public ActionResult Index(int id = 0)
    {
        JobSummaryModelHelper jobDetails = new JobSummaryModelHelper();
        jobDetails.Id = id;  

        jobDetails.jdata = .....

        return View(jobDetails);
    }

    public ActionResult Authenticate()
    {
        .....

        int usercount = db.JobBoardUsers.Where(u => u.userid.Equals(un) && u.passcode.Equals(pc)).Select(u => new AccountModel() { uid = u.id }).Count();
        if (usercount > 0)
        {
            HttpContext.Session["IsSignedIn"].Equals(true);              
        }
        return RedirectToAction("Index", jobDetails);           
视图:

。。。。。
@if(Convert.ToBoolean(会话[“IsSignedIn”]))
{
登录!

}
在您的代码中,这一行

HttpContext.Session["IsSignedIn"].Equals(true);
要么是这个

HttpContext.Current.Session["IsSignedIn"] = true;
还是这个

Session["IsSignedIn"] = true;

原因-您需要访问当前HttpContext上的会话。通过关闭HttpContext(控制器有对当前HttpContext的引用)或明确标识它
HttpContext.current
,您可以确保在当前HttpContext上设置了正确的会话值。另外,我更改了您设置属性的方式,我不确定
.Equals()
是否会执行您希望它执行的操作。但是,我确实知道使用显式的
=
符号将。

控制器的操作没有将会话变量设置为true

要做到这一点,您需要更换

HttpContext.Session["IsSignedIn"].Equals(true);


Equals方法不会更改a值,它是一种告诉您两个条件是否相等的方法。。它有一个返回值,但您没有对其执行任何操作

将其更改为
HttpContext.Current.Session[IsSignedIn]=true
然后在视图上以相同的方式访问它。(
HttpContext.Current.Session[IsSignedIn]

HttpContext.Session["IsSignedIn"].Equals(true);
HttpContext.Session["IsSignedIn"] = true;