簡體   English   中英

訪問會話信息會給出System.NullReferenceException

[英]Accessing session info gives System.NullReferenceException

我對ASP.net c#MVC有點陌生。 我正在嘗試創建一個登錄應用程序並創建一個會話。在我的應用程序中,我有一個登錄控制器。 在登錄控制器中,我將已登錄用戶的數據讀取到會話變量中,如以下代碼段所示。

[HttpPost]
public ActionResult Authorize(MVCFirst.Models.User userModel)
{
    using (MVCNewEntities db = new MVCNewEntities())
    {
        var userDetails = db.Users.Where(x => x.UserName == userModel.UserName && x.UserPWD == userModel.UserPWD).FirstOrDefault();
        if (userDetails == null)
        {
            userModel.LoginErrorMessage = "Incorrect useer name and password.";
            return View("Index", userModel);
        }
        else
        {
            Session["userID"] = userDetails.UserID;
            Session["userName"] = userDetails.UserName;
            return RedirectToAction("Index","Home");
        }
    }
}

我的HomeController Index是一個ActionResult HomeControllerView中,我嘗試將會話的Session值讀取為html標頭,如以下代碼段所示。

 <body> <div> <h1>Dashboard</h1> <h3>Username : @Session["userName"].ToString()</h3> <h3>User ID : @Session["userID"].ToString()</h3> <a href="@Url.Action("LogOut","Login")">Logout</a> </div> </body> 

當我編譯應用程序時,它不會給出任何錯誤。 它建立成功。 但是當我運行它時,它會引發異常。 異常中的消息說明以下內容。

消息“對象引用未設置為對象的實例。”

我在這里想念的是什么? 我在這里犯了什么錯誤? 進一步解釋。 當我嘗試登錄時沒有發生這種情況。 當我第一次運行該應用程序時,會發生這種情況。

您可以省略.ToString()

在MVC中,執行@someObj對於對象將不顯示任何內容,並將對其他任何對象隱式調用.ToString()

<div> 
    <h1>Dashboard</h1>
    <h3>Username : @Session["userName"]</h3>
    <h3>User ID  : @Session["userID"]</h3>
</div>

只是嘗試使用這個( Object?.ToString()

<body>
    <div> 
        <h1>Dashboard</h1>
        <h3>Username : @Session["userName"]?.ToString()</h3>
        <h3>User ID : @Session["userID"]?.ToString()</h3>
        <a href="@Url.Action("LogOut","Login")">Logout</a>
    </div>
</body>

在Global.Asax文件中設置以下

protected void Application_PostAuthorizeRequest()
{
HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM