コントローラでは、他のコントローラからアクションのビューを返すことはできますか?他のオプションは、Html.Action(...)を使って部分ビューを返し、他のコントローラからビューを返すことですが、クリーナーがあるかどうか疑問に思っていました。ありがとう。MVC2 - DIFFERENTコントローラからアクションを呼び出すことはできますか?
答えて
を私がアクションを起動共有ビューを持っていた私の元の溶液を、使用して終了。それは私が必要としたよりずっと少ないコードでした。ありがとう。
はい、そのビューが共有ビューである場合。 MVCプロジェクトのViews/Shared
フォルダにビューを配置すると、両方のコントローラがそれを返すことができます。
これは本当ですが、技術的に別のコントローラに指定されたビューをロードする場合、@ Marnixの答えは正しいです。 –
再利用したいビューだけの場合は、ビューのパスを渡すことができます。たとえば:カイルが既に提案のように
public ActionResult MyAction()
{
// do your model magic here
return View("~/Views/OtherController/View.aspx", model);
}
それともViews/Shared
にビューを移動できます。
ここで私はちょうどその目的のために特別なビューを作成することなく、別のアクションを呼び出すために使用戦略です:
はアクション、コントローラ、およびRouteValuesを定義するモデルを取る共有ビューを作成し、その唯一の責任はRenderActionをそのモデルの値で呼び出すことです。
次に、パラメータとしてAction、Controller、およびRouteValuesをとり、この共有ビューのViewResultを返すヘルパーメソッドを基本コントローラクラスに作成します。こうすることで、別のアクションのコンテキストから他のアクションをレンダリングしたいときはいつでも、このヘルパーメソッドと共有ビューをすべてのコントローラで再利用できます。
もちろん、それは表示であり、実行したいアクションではない場合、Marnixの答えは正しいです。
-1は説明されていないと誰も助けません。 – StriplingWarrior
これは物事について実際に不器用な方法を感じています。ビューを使用して、どのコントローラがMVCモデルをハッキングするように感じるかに影響を与えます。 –
@Simon Halsey:RenderActionの考え方全体がMVCモデルをハックしていると主張されるかもしれないと思います。それにもかかわらず、重複したコードがたくさんあるのを防ぐのに役立ちます。あるコントローラが他のコントローラ上で子アクションを呼び出すのを容易にするために 'RenderAction'メソッドを利用すると、同様にコードの再利用を助けることができます。しかし、私はフィードバックに感謝します。あまりにも不器用な方法を見つけたら、私たちとそれを共有することを願っています。 – StriplingWarrior
他のコントローラでアクションを呼び出す場合は、Controller.RedirectToAction()を使用してアクションとコントローラ名を渡すことができます。
ただし、これによって追加のサーバーラウンドトリップが追加されます。あなたはそれを避けたい場合は、ここで示したTransferResultクラスを使用することができます
- 1. コントローラのどのアクションからGSPを呼び出すのか?
- 2. jQuery.ajaxからindexControllerで定義されたアクションを呼び出すことはできますか?
- 3. コントローラからメソッドを呼び出す
- 4. Ember:コントローラからコンポーネントアクションを呼び出す
- 5. ASP.NET MVC2 Ajax ActionLinkが間違ったアクションを呼び出す
- 6. angularjsのコントローラから特定の関数を呼び出すことはできますか?
- 7. コントローラから呼び出すときのファイルパスの場所
- 8. 他のコントローラの呼び出しアクション
- 9. cakephpの別のコントローラでControllerアクションを呼び出す方法は?
- 10. Mojoliciousの他のコントローラでアクションを呼び出す方法は?
- 11. DAOはDAOを呼び出すことはできますか?
- 12. Service.onStartCommandでstopSelf()を呼び出すことはできますか?
- 13. Javaでprintlnを呼び出すことはできますか?
- 14. プリミティブでdeleteを呼び出すことはできますか?
- 15. cfscriptでカスタムタグを呼び出すことはできますか?
- 16. Reactとreduxで別のレデューサーからアクションを呼び出す
- 17. 別のスレッドからstream.Closeを呼び出すことはできますか?
- 18. jQuery $ .postをコールバックから再度呼び出すことはできますか?
- 19. C++からclojureコードを呼び出すことはできますか?
- 20. C DLLからC#DLLを呼び出すことはできますか?
- 21. Python内からPerlを呼び出すことはできますか?
- 22. コードからASP.NET RegSQLを呼び出すことはできますか?
- 23. 別のストアドプロシージャからストアドプロシージャを呼び出すことはできますか?
- 24. アダプタからstartActivityForResultを呼び出すことはできますか?
- 25. linuxクライアントからwindows DLLを呼び出すことはできますか?
- 26. DUnit GUITestrunnerのコードからToolsAPIを呼び出すことはできますか?
- 27. WCFサービスがメソッドをクライアントから呼び出すことはできますか?
- 28. Javaクラスからアンドロイドクラスを呼び出すことはできますか?
- 29. javascript scriptdefタスクからantタスクを呼び出すことはできますか?
- 30. MPAndroidChartのonValueSelectedメソッドからregisterForContextMenuを呼び出すことはできますか?
質問のタイトルと本文が一致しません。他のコントローラの*アクション*または単に別のコントローラのために構築された*ビュー*を呼び出すことを求めていますか? – StriplingWarrior