我有多个ASP.NET MVC 5项目,这些项目的页眉/菜单在html完全相同的页面顶部。从数据库中提取了一些菜单项,徽标,链接。为了消除跨项目的这些冗余代码,我想仅将共享项目用作标头,进行编译,然后在每个应用程序中对其进行引用。我使用了RazorGenerator.Mvc,因此可以在DLL中编译我的视图,并且还可以使用MvcSiteMapprovider作为菜单。到目前为止,一切正常。在共享/引用的项目中,我创建了一个名为“ CommonHeader.cshtml”的视图,并将此部分视图添加到其他MVC项目中并进行编译时,一切都很好。
不过,我在Sessions上遇到了一些问题。在共享项目的控制器中,我具有以下功能
protected override void OnActionExecuting
...这将调用一个sproc并将诸如链接/徽标之类的东西加载到TempData中,然后显示在我的标头中,例如TempData.Peek(“ fieldname”)。当我运行共享项目本身时,它将加载我放入View中的这些TempData字段。当我重建引用该项目的其他应用程序项目时,这些会话/临时数据字段似乎为空。我不是从使用中的应用程序视图中引用会话变量,而是从共享项目本身中引用,因此您认为它可以工作,但是当从另一个项目中引用代码时,似乎未执行此OnActionExecuting函数。
奇怪的是,我的MvcSiteProvider使用的用于构建站点地图/菜单的类会将内容加载到Session中仍然很好。所以我知道我认为问题不在于所引用的项目不能利用Session。似乎所引用项目中的控制器似乎未在运行OnActionExecuting代码。有人知道为什么吗?又或者我如何在不必将所有Session都加载到加载SiteMap的类中并将其保留在家庭控制器中的情况下使其工作呢?
答案 0 :(得分:0)
我从来没有想过,但是我想我想出了一个更好的方法来处理它。我可以创建一个模型,该模型调用用于获取所有这些信息(徽标,链接等)的存储过程,并将其返回到我的标题视图。当然,页面每次加载都会调用它,但是如果只有几个字段,那没什么大不了的。