Доступ к информации о сеансе дает System.NullReferenceException - PullRequest
0 голосов
/ 07 марта 2019

Я немного новичок в 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, что ActionResultView из HomeController я пытаюсь прочитать значения сеанса сеанса в заголовок 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>

Когда я компилирую приложение, оно не выдает никакой ошибки.Построить успешно.Но когда я запускаю его, он выдает исключение.Сообщение в исключении говорит следующее.

Сообщение "Ссылка на объект не установлена ​​для экземпляра объекта."

Что мне здесь не хватает?В чем ошибка, которую я сделал здесь?Дальнейшее объяснение.Это не произошло, когда я пытаюсь войти.Это произошло, когда я впервые запустил приложение.

Ответы [ 3 ]

2 голосов
/ 07 марта 2019

Вы можете просто опустить .ToString().

В MVC выполнение @someObj ничего не отобразит для null объектов, и оно будет неявно вызывать .ToString() для всего остального.

<div> 
    <h1>Dashboard</h1>
    <h3>Username : @Session["userName"]</h3>
    <h3>User ID  : @Session["userID"]</h3>
</div>
1 голос
/ 07 марта 2019

просто попробуйте использовать это (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>
0 голосов
/ 07 марта 2019

В файле Global.Asax установите следующее

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