我正在尝试MVC,我正在尝试创建一个示例库存控制面板,以自学了使用MVC和实体框架的基础知识。
我有一个包含两个表格的数据库,类别&产品。在我的MVC网站上,我希望能够浏览这些表中的行,其中Categories与产品共享一对多的关系。
我目前已经设置了你可以在MVC中查看/编辑/删除类别,但现在我希望能够查看/编辑/删除类别中的产品,我不知道如何去做。
我当前的网址结构为<URL>/categories
我希望通过导航到<URL>/categories/<category id>/Products
来显示与该类别相关联的所有产品的列表来访问类别中的产品列表,然后<URL>/categories/<category id>/Products/delete/<product id>
等来操纵它们。
我已经考虑过向RegisterRoutes函数添加自定义路由,但我认为我没有理解这样做,因为我创建了这个
routes.MapRoute(
"Products",// Route name
"Category/{categoryid}/{controller}/{action}/{id}",// URL with parameters
new { categoryid = "", controller = "Products", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
这似乎完全错误,我不知道URL广告与默认参数之间的关系如何工作,或者如何链接到项目中的文件夹结构。
我试图做错了什么?我应该采取其他方式吗?任何指导都将不胜感激。
答案 0 :(得分:0)
通常我们会为Categories
和Products
设置控制器。 Categories
控制器看起来像
public class CategoriesController : Controller {
public ActionResult Index() {
return View(db.Categories());
}
这会为您提供<URL>/categories
的网址,以提供类别列表。
然后您有一个Edit
ActionResult
来获取CategoryID并查看Category
这个网址的详细信息<URL>/categories/1
public ActionResult Edit(int id) {
var model = db.Categories.Find(id);
return View(model);
}
在修改屏幕上,我们会在表格/网格中显示与Products
相关联的Category
列表,无论是Add
Edit
和Delete
按钮/链接。如果点击Add
按钮/链接,我们会重定向到Products
控制器Create
操作,并将CategoryID
作为参数传递。该网址看起来像<URL>/products/create/1
,操作看起来像
public ActionResult Create(int id) {
var model = new Product(){ CategoryID = id};
return View(model);
}
如果您点击Edit
编辑视图中Product
的{{1}},则只需拨打Category
控制器上的Edit
操作即可通过Product
{1}}作为参数。该网址看起来像ProductID
,操作看起来像
<URL>/products/edit/1
每个人都有自己的偏好,但我创建了一些非常复杂的MVC网站,无需修改默认路由或创建新路由。