【发布时间】:2016-06-10 16:21:15
【问题描述】:
我正在制作 mvc 项目,并在布局页面中显示来自会话变量的用户名。如果会话变量为空,那么它将显示登录链接。见下面的代码。
_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 条件中用户 ID 的 ''.ToString'。
-
只需使用'HttpContext.Current.Session["UserId"]'
-
是的..它的工作..谢谢你..
-
干杯!我会将此作为答案发布
标签: asp.net-mvc asp.net-mvc-4 session