Session null in _Layout.cshtml MVC 4



我刚刚创建了一个演示MVC应用程序。它有两个控制器, HomeControllerContactController .这是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代码

最新更新