0

我在使用 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>
}
4

3 回答 3

1

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

为此,您需要更换

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

HttpContext.Session["IsSignedIn"] = true;

Equals 方法不会更改 a 值,它是一种告诉您两件事是否相等的方法。它有一个返回值,但您什么也没做

于 2014-02-05T23:29:27.563 回答
0

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

于 2014-02-05T23:29:37.630 回答
0

在您的代码中,这一行

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

应该是这个

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

或这个

Session["IsSignedIn"] = true;

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

于 2014-02-05T23:28:01.447 回答