gpt4 book ai didi

asp.net-mvc - 如何在 MVC 的布局页面中显示 session 中的用户名?

转载 作者:行者123 更新时间:2023-12-03 23:47:03 24 4
gpt4 key购买 nike

我正在制作 mvc 项目,并在布局页面中显示来自 session 变量的用户名。如果 session 变量为空,那么它将显示登录链接。见下面的代码。

_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>
}

我在登录操作中设置 session 如下。

Controller Action

    [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);
}
}

但我得到的对象引用未设置为对象的实例。错误见附图。

Error of Object reference

最佳答案

这个

@if (HttpContext.Current.Session["UserId"].ToString() != null && 
HttpContext.Current.Session["UserId"].ToString() != "")

应该替换为

@if (HttpContext.Current.Session["UserId"] != null &&
...

您的代码中的问题是 .ToString() 只能在非空引用上调用,而您的代码目前无法阻止这种情况。

关于asp.net-mvc - 如何在 MVC 的布局页面中显示 session 中的用户名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35668876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com