访问 session 信息得到 System.NullReferenceException
Accessing session info gives System.NullReferenceException
我对 ASP.net c# MVC 有点陌生。我正在尝试创建一个登录应用程序并创建一个 session.In 我的应用程序 我有一个登录控制器。在登录控制器中,我将登录用户的数据读取到 session 变量,如以下代码段所示。
[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
。在 HomeController
的 View
中,我尝试将 session 的 Session 值读取为 html header,如以下代码段所示。
<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>
当我编译应用程序时,它没有给出任何错误。它建立成功。但是当我 运行 它时,它抛出异常。异常中的消息说明如下。
Message "Object reference not set to an instance of an object."
我在这里缺少什么?我在这里犯了什么错误?
进一步解释。当我尝试登录时没有发生这种情况。这发生在我 运行 第一次申请时。
试试用这个 (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);
}
您可以省略 .ToString()
。
在 MVC 中,执行 @someObj
将不会为 null 对象显示任何内容,并且会隐式调用 .ToString()
在其他任何事情上。
<div>
<h1>Dashboard</h1>
<h3>Username : @Session["userName"]</h3>
<h3>User ID : @Session["userID"]</h3>
</div>
我对 ASP.net c# MVC 有点陌生。我正在尝试创建一个登录应用程序并创建一个 session.In 我的应用程序 我有一个登录控制器。在登录控制器中,我将登录用户的数据读取到 session 变量,如以下代码段所示。
[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
。在 HomeController
的 View
中,我尝试将 session 的 Session 值读取为 html header,如以下代码段所示。
<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>
当我编译应用程序时,它没有给出任何错误。它建立成功。但是当我 运行 它时,它抛出异常。异常中的消息说明如下。
Message "Object reference not set to an instance of an object."
我在这里缺少什么?我在这里犯了什么错误? 进一步解释。当我尝试登录时没有发生这种情况。这发生在我 运行 第一次申请时。
试试用这个 (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);
}
您可以省略 .ToString()
。
在 MVC 中,执行 @someObj
将不会为 null 对象显示任何内容,并且会隐式调用 .ToString()
在其他任何事情上。
<div>
<h1>Dashboard</h1>
<h3>Username : @Session["userName"]</h3>
<h3>User ID : @Session["userID"]</h3>
</div>