我刚刚开始学习ASP.NET MVC 3.我一直在浏览ASP.NET网站上的音乐商店示例,以及开始开发我的自己的网站,但我有一些麻烦理解我应该如何设置我的控制器操作方法。需要帮助设计到ASP.NET MVC的动作方法
在我的网站上,每个登录的用户都能够在他们的项目上执行标准的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.
但我不明白如何在第一Create()方法传递到新的项目应自该视图()辅助方法来创建于只能接受一个对象参数的项目的引用。我应该只是将对项目的引用添加到ViewBag的属性中?我是动态类型的新手,ViewBag对我来说似乎很神奇。所以我有点犹豫是否使用它。我也一直认为强类型设计更好。那么我是否应该创建一个单独的“NewItemData”模型对象,其中包含对新项目的引用以及要添加到的项目?
表单一旦知道哪个项目正在添加一个项目,它应该如何在提交时将此信息传回?是否应该在表单中隐藏“ProjectID”字段?或者应该将表单POST回到查询字符串中带有项目ID的URL?
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
是的你是对的,项目不能与项目一起存在,所以你的例子非常有意义。尽管我认为对于项目特定的操作(如查看项目详细信息,编辑和项目)仍然有单独的ItemController也是有意义的。但是留下创建和删除项目到项目控制器,因为实际上我总是添加项目或从项目中删除项目。 – 2011-04-17 01:38:40