【问题标题】:OnActionExecuting not executing in referenced MVC projectOnActionExecuting 未在引用的 MVC 项目中执行
【发布时间】:2019-04-13 07:29:04
【问题描述】:

我有多个 ASP.NET MVC 5 项目,它们在页面顶部有标题/菜单,其中 html 完全相同。从数据库中提取了一些菜单项、徽标、链接。为了消除跨项目的这些冗余代码,我想仅对标头使用共享项目,编译然后在每个应用程序中引用它。我使用了 RazorGenerator.Mvc,因此我的视图将在 DLL 中编译,并且我还使用 MvcSiteMapprovider 作为菜单。到目前为止一切正常。在共享/引用项目中,我创建了一个名为“CommonHeader.cshtml”的视图,当我将此部分视图添加到我的其他 MVC 项目并编译时,一切都很好。

不过,我在使用 Sessions 时遇到了一些问题。在共享项目的控制器中,我有以下功能

protected override void OnActionExecuting

...它调用存储过程并将链接/徽标之类的内容加载到 TempData 中,然后显示在我的标题中,例如 TempData.Peek("fieldname")。当我运行共享项目本身时,它会很好地加载我放入视图中的这些 TempData 字段。当我重建引用该项目的其他应用程序项目时,这些会话/临时数据字段似乎为空。我不是从使用应用程序视图中引用会话变量,而是从共享项目本身引用,所以你会认为它会工作,但是当从另一个项目引用代码时,这个 OnActionExecuting 函数似乎没有被执行。

奇怪的是,我的 MvcSiteProvider 用于构建站点地图/菜单的类仍然可以将内容加载到 Sessions 中。所以我知道我认为问题不在于引用的项目不能使用 Session。看起来引用项目中的控制器似乎没有运行 OnActionExecuting 代码。有谁知道为什么?或者我怎样才能让它工作,而不必将我的所有 Session 加载到加载 SiteMap 的那个类中,将它保存在 home 控制器中?

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-5 session-state


    【解决方案1】:

    我从来没有弄清楚这一点,但我想我想出了一个更好的方法来处理它。我可以创建一个模型,调用用于获取所有这些信息(徽标、链接等)的存储过程并将其返回到我的标题视图。当然,每次页面加载时都会调用它,但如果它只有几个字段,那没什么大不了的。

    【讨论】:

    • 仅供参考,我实现了这个,它工作得很好。模型......他们是你的朋友:即使只是为了元相关信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 2011-10-08
    • 2015-09-03
    相关资源
    最近更新 更多