-1

我有一个较旧的应用程序,它有一个 ActionResult 函数,我想将它包含在另一个较新的应用程序中。

我发现我可以添加旧控制器作为参考,将控制器实例化为对象,然后相应地调用 ActionResult 函数,如下所示:

public ActionResult test()
    {
        OlderApplication.Controllers.PatronController temp = new OlderApplication.Controllers.PatronController();

        return temp.Index();
    }

我的问题在于它在 temp.Index() 内部引用了 Session,并且它以 null 的形式出现,而不是具有应该存在的值。我可以通过这种方式提供会话吗?

4

2 回答 2

1

在您给出的示例中,您没有两个 MVC 应用程序 - 您有一个共享相同代码库的应用程序。一个“应用程序”是由网络服务器定义的,但我离题了。

Session tempinside 为 null 的原因是您没有正确初始化控制器 - 控制器不是 POCO,它们需要初始化。调用temp.Initialize(),但是您需要自己创建RequestContext实例,如下所示:

RequestContext context = new RequestContext( this.Context, this.RouteData );
OlderApplication.Controllers.PatronController oldController = new OlderApplication.Controllers.PatronController();
oldController.Initialize( context );

return oldController.Index();

尽管如果您正在执行此步骤,您不妨将旧控制器连接到您的区域注册和/或 URI 路由表,从而无需编写此代码。

于 2013-01-20T08:47:42.863 回答
1

正如戴指出的那样,您没有正确创建控制器。我建议使用控制器工厂来创建您的控制器。

var oldController  = ControllerBuilder.Current.GetControllerFactory().CreateController(Request.RequestContext, "Patron");
于 2013-01-20T08:54:49.457 回答