我正在制作mvc项目,并在布局页面中显示会话变量中的用户名。如果会话变量为null,则它将显示登录链接。参见下面的代码。
_Layout.cshtml
@if (HttpContext.Current.Session["UserId"].ToString() != null && HttpContext.Current.Session["UserId"].ToString() != "")
{
using (Html.BeginForm("LogOff", "Home", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" }))
{
<ul class="nav navbar-nav navbar-right">
<li>
<p><b>@Session["UserName"]</b></p>
</li>
<li><a href="javascript:document.getElementById('logoutForm').submit()">Log off</a></li>
</ul>
}
}
else
{
<ul class="nav navbar-nav navbar-right">
<li>@Html.ActionLink("Register", "Register", "Home", routeValues: null, htmlAttributes: new { id = "registerLink" })</li>
<li>@Html.ActionLink("Log in", "Login", "Home", routeValues: null, htmlAttributes: new { id = "loginLink" })</li>
</ul>
}
我在登录操作中设置了会话,如下所示。
控制器动作
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginViewModel login)
{
User user = new User();
user = db.Users.Where(x => x.UserName == login.UserName && x.Password == login.Password).FirstOrDefault();
if(user != null)
{
Session["UserName"] = user.UserName;
Session["UserId"] = user.UserName;
return RedirectToAction("Index");
}
else
{
return View(login);
}
}
但我得到对象引用未设置为对象的实例。错误,请参阅所附图片。
这个
@if (HttpContext.Current.Session["UserId"].ToString() != null &&
HttpContext.Current.Session["UserId"].ToString() != "")
应该替换为
@if (HttpContext.Current.Session["UserId"] != null &&
...
您的代码中的问题是.ToString()
只能在非null引用上调用,并且您的代码目前无法阻止这种情况。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句