Я только начинаю изучать ASP.NET MVC 3. Я изучал образец музыкального магазина на веб-сайте ASP.NET, а также начал разрабатывать свой собственный сайт, но у меня возникли некоторые проблемы понимание того, как я должен настроить методы действия моего контроллера.
На моем сайте каждый зарегистрированный пользователь сможет выполнять стандартные операции CRUD в своих проектах. Я настроил это подобно образцу Music Store со следующими методами действия в 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.
Кроме того, пользователи смогут добавлять элементы в каждый проект. Элементы не могут существовать сами по себе и должны быть связаны с проектом при создании. У меня возникли проблемы с пониманием, как передать ссылку на проект, в котором должен быть создан Item. Например, в моем контроллере элементов у меня есть пара методов действия 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 () передает ссылку на проект, в котором должен быть создан новый Item, поскольку вспомогательный метод View () может принимать только один параметр объекта. Должен ли я просто добавить ссылку на проект в свойство ViewBag? Я новичок в динамических типах, и ViewBag кажется мне просто волшебным. Так что я немного не решаюсь его использовать. Я также всегда думал, что строго типизированный дизайн лучше. Поэтому я должен создать отдельный объект модели "NewItemData", который содержит ссылку на новый элемент, а также на проект, к которому он добавляется?
Как только форма узнает, в какой проект она добавляет элемент, как она должна передавать эту информацию при отправке? Должно ли в форме быть скрытое поле «ProjectID»? Или форма POST возвращается к URL с идентификатором проекта в строке запроса?
www.mysite.com/Item/Create?ProjectID=1234
Наконец, я также хочу иметь возможность перечислять элементы, которые добавляются в каждый проект. Должно ли это быть частью ItemController или ProjectController. Ради простоты я придерживаюсь стандартной маршрутизации URL Controller \ Action [ID]. Некоторые из моих идей перечислены ниже. Я склоняюсь к последнему варианту, но очень хотел бы услышать, что думают другие с большим опытом работы с этим материалом.
Action Method URL
ItemController.Index(int ProjectID) \Item?ProjectID=1234
ItemController.List(int id) \Item\List\1234
ProjectController.Items(int id) \Project\Items\1234