Сеанс null в _Layout.cshtml MVC 4

Я только что создал демо-приложение 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();
    }
}

Вот _Layout.cshtmlкод, в котором я показываю Session["Username"]:

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

Эта ошибка возникает часто. Кто-нибудь знает, чего мне не хватает ?

1 ответ

  1. Создать 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код