質問: こんにちは。 Windows10でASP.NETのアプリケーションを開発しています。 Visual Studio 2017 Communityを使っています。 ### 前提・実現したいこと 部分ビューを使う場合の設計方針(ファイル構成)について教えてください。 ASP.NET MVCでは、Model-View-Controllerの構成でプロジェクトを作ります。 現在のプロジェクトは、すでに動いているもので、この大原則に微妙に当てはまらない構造になっています。 いま困っているのは、部分ビューのなかで条件分岐するときに、あるいは条件分岐で部分ビューを表示するときに、その条件分岐をどのControllerやViewに書けばよいのか、ということです。 ファイルの構造は、 Model/User.cs View/Share/_Main.cshtml View/Share/_LeftMenu_Admin.cshtml View/Share/_LeftMenu_User.cshtml Controller/UserController.cs です。 これで、ログインしたときに_Main.cshtmlのなかで、下記のようにメニューを分岐しています。Adminのときは_LeftMenu_Admin.cshtmlを使い、一般ユーザーの場合は、_LeftMenu_User.cshtmlを使っています。 管理者のほうが、メニュー項目が少し多いです。 大部分は同じコードです。 Q1)この場合、そもそもメニューのファイルを_LeftMenu.cshtmlのひとつに統合して、条件分岐をそのなかのメニュー(ユーザー管理)の表示部分で行えば、もっとすっきりするのではないか、と考えました。これはありでしょうか、なしでしょうか? Q2)下記のコードでは、_Main.cshtmlのなかで条件分岐をしていますが、そういうことはControllerで行うべきではないのでしょうか? Q3)現在のプロジェクトには、_MainController.csも、_LeftMenu_AdminContreller.csも、_LeftMenu_UserContreller.csも存在しないのですが、MVCでもControllerはなくてもよいのでしょうか? 部分ビューだから不要なのでしょうか? Q4)部分ビューの場合のControllerは、書くとしたらどこに書きますか? Controller/Share/_MainController.cs? Controller/_MainController.cs? ### 該当のソースコード うまく必要なものを抜き出せているでしょうか・・・? ``` Model/User.cs public partial class User { public int Id { get; set; } public string UserId { get; set; } public string Password { get; set; } public bool IsAdmin { get; set; } } View/Share/_Main.cshtml if (user.IsAdmin) { @Html.Partial("_LeftMenu_Admin"); } else { @Html.Partial("_LeftMenu_User"); } ``` ### 補足情報(言語/FW/ツール等のバージョンなど) Microsoft Visual Studio Community 2017 Version 15.0.26228.9 D15RTWSVC Microsoft .NET Framework Version 4.6.01586 です。 よろしくお願いします。
回答: Q1)有り。照会ビュー、削除ビューなどは同chtmlファイルに照会画面、削除画面を分けてることはある。 Q2)よいと思いますけど、どこが不安要素ですか?良くある部分ビューの使い方だと思います。 Q3)Controllerは業務ごとに分かれてるべきだと僕は思っていますよ。 たとえば今回の画面はログイン及びログイン後のホームページなので、Controllerを切り分ける必要は無いかと。 この後機能で、商品一覧とか、企業一覧とか、別の処理というか、カテゴリが分かれるのであればController切り分けたほうがいいとは思いますが。