在MVC视图中使用会话变量的直接答案?

时间:2014-02-05 23:24:59

标签: 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;  

        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(Session["IsSignedIn"]))
{
    <fieldset>
        <legend></legend>
        <p style="color: red; font-weight: bold;">Logged in!
        </p>
    </fieldset>
}

3 个答案:

答案 0 :(得分:1)

您的控制器操作未将会话变量设置为true。

为此,您需要更换

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

HttpContext.Session["IsSignedIn"] = true;

Equals方法不会改变a值,它是一个告诉你两个东西是否相等的方法..它有一个返回值,但是你没有做任何事情

答案 1 :(得分:0)

在您的代码中,此行

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

应该是这个

HttpContext.Current.Session["IsSignedIn"] = true;

或者

Session["IsSignedIn"] = true;

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

答案 2 :(得分:0)

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