我刚刚创建了一个演示MVC应用程序。它有两个控制器, HomeController
和 ContactController
.这是HomeController
代码:
public class HomeController : Controller
{
public ActionResult Index()
{
Session["Username"] = "Admin User";
return View();
}
}
这是ContactController
:
public class ContactController : Controller
{
public ActionResult Index()
{
return View();
}
}
这是我显示Session["Username"]
的_Layout.cshtml
代码:
<div class="float-left">
<p class="site-title">@Session["Username"].ToString()</p>
</div>
现在,一旦我托管了应用程序,就会调用默认Home/Index
并设置会话变量。接下来,当我加载Contact/Index
控制器方法时,它显示错误
对象引用未设置为对象的实例。
在这一行<p class="site-title">@Session["Username"].ToString()</p>
此错误经常发生。有人知道我错过了什么吗?
创建ApplicationBaseController
:
public class ApplicationBaseController : Controller
{
public ApplicationBaseController()
{
}
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
//Define your UserName
Session["Username"] = "Admin User";
//Some code if you want to add
base.OnActionExecuted(filterContext);
}
}
从ApplicationBaseController
继承控制器:
public class HomeController : ApplicationBaseController
{
public ActionResult Index()
{
return View();
}
}
public class ContactController : ApplicationBaseController
{
public ActionResult Index()
{
return View();
}
}
在_Layout.cshtml
:
<div class="float-left">
<p class="site-title">@Session["Username"]</p>
</div>
更新:
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
//Define your UserName
Session["Username"] = "Admin User";
return View();
}
}
在_Layout.cshtml
:
<div class="float-left">
<p class="site-title">@Session["Username"]</p>
</div>
如果它不起作用(因为对我来说它可以正常工作),请提供完整的_layout.cshtml
代码和Index.cshtml
代码