0

現在、VS2010 でフル Web アプリケーションを開発しており、ASP .NET MVC 3 フレームワークを使用しています。

私のアプリケーションの簡単な概要は次のとおりです。

  • コントローラ Ctrl1 を実装しました。
    • Ctrl1 には、HttpGet アクション メソッド ActMeth1 が含まれています。
      • Ctrl1Views フォルダーには、ビュー View1 が含まれています。
  • コントローラ Ctrl2 を実装しました。
    • Ctrl2 には、HttpPost アクション メソッド ActMeth2 が含まれています。
      • ActMeth2 は、Ctrl2Views フォルダーに含まれるビュー View2 を返します。
  • Ctrl1 と Ctrl2 は同じネームスペースにあります。

ActMeth1 が ActMeth2 を呼び出してロジックを実行し、View2 を返すようにします。

ActMeth1 のソースコードは次のとおりです。

public ActionResult ActMeth1()
{
    Ctrl2 myCtrl2 = new Ctrl2();
    return myCtrl2.ActMeth2();
}

残念ながら、ActMeth1 は View1 を返します。
誰かがこの事実を説明してくれますか?
今後ともよろしくお願いいたします

4

2 に答える 2

1

コントローラーのアクション メソッドを別のコントローラーのアクション メソッドでインスタンス化すると、長期的には問題が発生します。

tempdata を使用するか、RedirectToAction のルート ディクショナリを介してデータを渡すことができます。

ロジックを再編成したほうがいいと思います

とにかくサーバー側でこのロジックを実行しようとしているので、

a. a. 両方のコントローラーの作業を行うサービスを作成します。両方のコントローラー アクション間でビューを共有するか、共通の html の部分ビューを作成します。 c. 適切なサービス メソッドを呼び出し、共有ビューをレンダリングする

于 2012-01-18T11:52:26.250 に答える
0

あなたがすることができます:

public ActionResult ActMeth1()
{
    Ctrl2 myCtrl2 = new Ctrl2();
    myCtrl2.ActMeth2();
    return View("~/Views/Ctrl2Views/View2.cshtml");
}

ただし、コントローラー1内からコントローラー2をインスタンス化する必要があるかどうかはわかりません...

于 2012-01-18T11:17:09.883 に答える