ASP.NET MVC 3 の学習を始めたばかりです。ASP.NET Web サイトのミュージック ストアのサンプルを調べたり、独自のサイトの開発を開始したりしましたが、どのようにコントローラーアクションメソッドをセットアップする必要があります。
私のサイトでは、ログインしている各ユーザーがプロジェクトで標準の CRUD 操作を実行できます。ProjectController で次のアクション メソッドを使用して、ミュージック ストアのサンプルと同様にセットアップしました。これまでのところ、これは私にとって理にかなっています。
ActionMethod View
ProjectController.Index() Lists the active users's projects
ProjectController.Details(int id) Shows details for project 123
ProjectController.Create() Shows a form to edit a new project
ProjectController.Create(FormCollection col) Adds a new project with the form contents
ProjectController.Edit() Shows a form to edit a new project
ProjectController.Edit(int id, FormCollection col) Adds a new project with the form contents
ProjectController.Deiete(int id) Shows a delete confirmation form
ProjectController.Delete(int id, FormCollection col) Deletes a project with the provided id.
さらに、ユーザーは各プロジェクトにアイテムを追加できます。アイテムは単独では存在できず、作成時にプロジェクトに関連付ける必要があります。理解に苦しんでいるのは、アイテムを作成する必要があるプロジェクトへの参照を渡す方法です。たとえば、私のアイテムコントローラーには、上記のコントローラーに似た Create() アクションメソッドのペアがあります。
ItemController.Create() Shows a form to create a new item
ItemController.Create(FormCollection col) Creates a new item with the details from the form.
View() ヘルパー メソッドは 1 つのオブジェクト パラメーターしか受け入れられないため、最初の Create() メソッドが新しいアイテムを作成する必要があるプロジェクトへの参照を渡す方法がわかりません。プロジェクトへの参照を ViewBag のプロパティに追加するだけですか? 私は動的タイプも初めてで、ViewBag はその時点で魔法のように思えます。なので使うのはちょっと躊躇します。また、強く型付けされたデザインの方が優れていると常に考えてきました。では、新しいアイテムへの参照と追加先のプロジェクトを含む別の「NewItemData」モデル オブジェクトを作成する必要がありますか?
フォームが項目を追加するプロジェクトを認識したら、送信時にこの情報をどのように返す必要がありますか? フォームに非表示の「ProjectID」フィールドが必要ですか? または、クエリ文字列にプロジェクト ID を含む URL にフォーム POST を返す必要がありますか?
www.mysite.com/Item/Create?ProjectID=1234
最後に、各プロジェクトに追加されたアイテムを一覧表示できるようにしたいと考えています。これは ItemController または ProjectController の一部である必要があります。簡単にするために、デフォルトの Controller\Action[ID] URL ルーティングに固執しています。私のアイデアのいくつかを以下に示します。私は最後のオプションに傾いていますが、このことについてより多くの経験を持つ他の人がどう思うかを本当に聞きたいです.
Action Method URL
ItemController.Index(int ProjectID) \Item?ProjectID=1234
ItemController.List(int id) \Item\List\1234
ProjectController.Items(int id) \Project\Items\1234