2011-06-30 15 views
0

コントローラでは、他のコントローラからアクションのビューを返すことはできますか?他のオプションは、Html.Action(...)を使って部分ビューを返し、他のコントローラからビューを返すことですが、クリーナーがあるかどうか疑問に思っていました。ありがとう。MVC2 - DIFFERENTコントローラからアクションを呼び出すことはできますか?

+6

質問のタイトルと本文が一致しません。他のコントローラの*アクション*または単に別のコントローラのために構築された*ビュー*を呼び出すことを求めていますか? – StriplingWarrior

答えて

1

を私がアクションを起動共有ビューを持っていた私の元の溶液を、使用して終了。それは私が必要としたよりずっと少ないコードでした。ありがとう。

1

はい、そのビューが共有ビューである場合。 MVCプロジェクトのViews/Sharedフォルダにビューを配置すると、両方のコントローラがそれを返すことができます。

+0

これは本当ですが、技術的に別のコントローラに指定されたビューをロードする場合、@ Marnixの答えは正しいです。 –

4

再利用したいビューだけの場合は、ビューのパスを渡すことができます。たとえば:カイルが既に提案のように

public ActionResult MyAction() 
{ 
    // do your model magic here 
    return View("~/Views/OtherController/View.aspx", model); 
} 

それともViews/Sharedにビューを移動できます。

-1

ここで私はちょうどその目的のために特別なビューを作成することなく、別のアクションを呼び出すために使用戦略です:

はアクション、コントローラ、およびRouteValuesを定義するモデルを取る共有ビューを作成し、その唯一の責任はRenderActionをそのモデルの値で呼び出すことです。

次に、パラメータとしてAction、Controller、およびRouteValuesをとり、この共有ビューのViewResultを返すヘルパーメソッドを基本コントローラクラスに作成します。こうすることで、別のアクションのコンテキストから他のアクションをレンダリングしたいときはいつでも、このヘルパーメソッドと共有ビューをすべてのコントローラで再利用できます。

もちろん、それは表示であり、実行したいアクションではない場合、Marnixの答えは正しいです。

+1

-1は説明されていないと誰も助けません。 – StriplingWarrior

+0

これは物事について実際に不器用な方法を感じています。ビューを使用して、どのコントローラがMVCモデルをハッキングするように感じるかに影響を与えます。 –

+0

@Simon Halsey:RenderActionの考え方全体がMVCモデルをハックしていると主張されるかもしれないと思います。それにもかかわらず、重複したコードがたくさんあるのを防ぐのに役立ちます。あるコントローラが他のコントローラ上で子アクションを呼び出すのを容易にするために 'RenderAction'メソッドを利用すると、同様にコードの再利用を助けることができます。しかし、私はフィードバックに感謝します。あまりにも不器用な方法を見つけたら、私たちとそれを共有することを願っています。 – StriplingWarrior

1

他のコントローラでアクションを呼び出す場合は、Controller.RedirectToAction()を使用してアクションとコントローラ名を渡すことができます。

ただし、これによって追加のサーバーラウンドトリップが追加されます。あなたはそれを避けたい場合は、ここで示したTransferResultクラスを使用することができます

How to simulate Server.Transfer in ASP.NET MVC?

関連する問題