У меня есть несколько проектов ASP.NET MVC 5 с заголовками / меню в верхней части страницы, где html точно такой же. Есть некоторые пункты меню, логотипы, ссылки, которые извлекаются из базы данных. Чтобы устранить этот избыточный код в разных проектах, я хотел использовать общий проект только для заголовка, компилировать и затем ссылаться на него в каждом приложении. Я использовал RazorGenerator.Mvc, чтобы мое представление было скомпилировано в DLL, и я также использую MvcSiteMapprovider для меню. Пока все работает хорошо. В проекте с общими / ссылочными ссылками я создал представление под названием «CommonHeader.cshtml», и когда я добавляю это частичное представление к другим моим MVC-проектам и компилирую, все хорошо.
Хотя у меня возникли проблемы с сессиями. В контроллере общего проекта у меня есть следующая функция
protected override void OnActionExecuting
... который вызывает sproc и загружает некоторые вещи, такие как ссылки / логотипы, в TempData, который затем отображается в моем заголовке, например TempData.Peek ("fieldname"). Когда я запускаю сам общий проект, он прекрасно загружает эти поля TempData, которые я поместил в View. Когда я перестраиваю другие проекты приложений, которые ссылаются на этот проект, эти поля сессии / временные данные кажутся пустыми. Я не ссылаюсь на переменные сеанса из представлений потребляющего приложения, но из самого общего проекта, так что вы думаете, что это будет работать, но кажется, что эта функция OnActionExecuting не выполняется, когда код ссылается из другого проекта.
Как ни странно, класс, который используется моим MvcSiteProvider для построения карты сайта / меню, будет загружать вещи в Sessions очень хорошо. Итак, я знаю, я предполагаю, что проблема заключается в том, что указанный проект не может использовать Session. Похоже, что контроллер в указанном проекте не выполняет код OnActionExecuting. Кто-нибудь знает почему? Или как я могу заставить это работать, не загружая всю мою Сессию в тот класс, который загружает SiteMap, сохраняя его в домашнем контроллере?