【问题标题】:Get value from referenced project's controller into main project controller从引用项目的控制器中获取值到主项目控制器
【发布时间】:2018-12-13 21:13:16
【问题描述】:

我有许多 ASP.NET MVC 应用程序具有相同的标头代码,因此我为标头创建了一个单独的 ASP.NET MVC 共享项目。我将存储过程中的数据加载到模型中以填充标题中的菜单,安装 RazorGenerator 以编译视图并在我的个人应用程序中引用 dll。效果很好。

存储过程中有一些数据可以获取我希望在我的消费应用程序中使用的标题菜单的一些值。是否可以从我正在使用的 ASP.NET MVC 项目中以某种方式获取这些值?这似乎是不可能的。如果我能以某种方式从引用的 DLL 中获取它,那就太好了,这样我就不必进行第二次冗余调用了。我尝试了以下方法,但没有任何效果:

  • 在共享项目设置 Session 或 Tempdata 变量中。这些不会进入消费项目。值为空
  • 我不能像这样实例化一个新类

    ReferencedNamespace.modelrow bla = new ReferencedNamespace.modelrow();
    

    从技术上讲,这是我能够取回值的唯一方法,但这实际上是通过引用项目的模型对数据库进行两次调用,因此它违背了目的。

  • 在引用项目的类中,我尝试创建一个属性:

    public string myvalue
    {
        get
        {
            return valuetoget;
        }
    }
    

    并在最初填充模型的控制器中添加

    valuetoget = whatever comes back from the stored procedure here
    

但是没有办法引用referenceNamespace.Controllers.Controllername.valuetopass。再次,我可以从消费项目中实例化它,这再次调用它两次。所以没用。

我是否可以将这些数据从引用的 DLL 的控制器移交给消费应用程序?就像我说的,我真的不想将原来的标头存储过程分成两个存储过程或进行冗余调用。

【问题讨论】:

    标签: c# asp.net-mvc controller .net-assembly


    【解决方案1】:

    我最终使用了会话。最初我在控制器操作方法中设置了会话值,但问题是当我在我的主要项目的控制器操作中检查会话数据时,这些值是空的,在我的视图中检查用户配置文件信息时导致错误。所以我只是假设引用库中的类库可以读取使用应用程序的会话变量,但无法设置它们。

    我错了。你可以

    基本上,当我在 Razor 代码中添加我的标题视图(来自引用的库)时,引用项目中该标题视图的代码在调用所有消费项目操作代码之后才会执行当前视图并返回......所以基本上我试图在会话字段存在之前获取它们。这就是它们为空的原因。

    您会认为我第二次运行页面(进行刷新)然后会话字段会在那里,因为引用的操作方法会加载它们,但它们仍然为空。我仍然不知道为什么,我想弄清楚......但我基本上只是成功地完成了这个:

    我将使用项目的控制器设置为从自定义类继承。然后在这个自定义类的重写 OnActionExecuting() 方法中......我检查我的 Session 字段是否为空。如果是,那么这(可能)是我们第一次运行它,所以我然后创建我引用的控制器的新实例。我采用此实例并调用标题的操作方法。这将导致在任何项目(引用或消费)中的任何控制器尝试触发任何操作代码之前“初始加载”会话数据。这将确保当任何控制器尝试引用这些会话字段时,它们会在那里。

    从技术上讲,这会导致我的 sproc 在加载标头时冗余运行两次,但仅在第一次加载页面时或者如果某些东西清除了会话,这对我来说很好。

    我读过 Sessions 是在类之间来回发送数据的不好方法,但在这种情况下,这是我想加载到 Session 变量中的用户配置文件信息,所以在我的情况下它可以解决。如果这是任何其他类型的数据,我会遇到问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      • 2013-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-01
      • 1970-01-01
      相关资源
      最近更新 更多