我在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>
}
答案 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]
)