-1

別の新しいアプリケーションに含めたい ActionResult 関数を持つ古いアプリケーションがあります。

古いコントローラーを参照として追加し、コントローラーをオブジェクトとしてインスタンス化し、それに応じて ActionResult 関数を呼び出すことができることがわかりました。

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

        return temp.Index();
    }

私の問題は、内部で temp.Index() がセッションを参照し、存在するはずの値を持つ代わりに null として表示されるという事実にあります。この方法でセッションを利用可能にすることはできますか?

4

2 に答える 2

1

あなたが示した例では、2 つの MVC アプリケーションはありません。同じコードベースを共有する単一のアプリケーションがあります。「アプリケーション」は Web サーバーによって定義されますが、余談になります。

内のセッションtempが 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

Daiが指摘したように、コントローラーを正しく作成していません。コントローラ ファクトリを使用してコントローラを作成することをお勧めします。

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