0

我在使用MVC視圖中的會話變量時遇到困難。在我下面的例子中,當我通過控制器將IsLoggedIn會話變量設置爲true時,我的視圖中的If條件未滿足。注:我修剪了一些不相關的代碼以便於閱讀。提前致謝!在MVC Views中使用會話變量的直接答案?

控制器:

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

在代碼中,這條線

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

應該要麼這個

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

或本

Session["IsSignedIn"] = true; 

原因 - 你需要在當前HttpContext訪問會話。通過關閉HttpContext(控制器引用當前的HttpContext)或明確標識它,您可以確保在當前的HttpContext上設置正確的會話值。此外,我對您如何設置房產進行了更改,我不確定.Equals()是否會按照您的要求進行操作。但是,我確實知道使用明確的=符號會。

1

您的控制器的操作未將會話變量設置爲true。

要做到這一點,你需要

HttpContext.Session["IsSignedIn"] = true; 

equals方法不改變一個值替換

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

,它是告訴你,如果兩件事情都是平等的方法..它有一個返回值,但你沒有做任何事情

0

將其更改爲HttpContext.Current.Session[IsSignedIn] = true 然後在視圖上以相同方式訪問它。 (HttpContext.Current.Session[IsSignedIn]