MVC中的嵌套视图是否可能?

时间:2015-07-07 16:17:00

标签: asp.net-mvc asp.net-mvc-4

我正在尝试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广告与默认参数之间的关系如何工作,或者如何链接到项目中的文件夹结构。

我试图做错了什么?我应该采取其他方式吗?任何指导都将不胜感激。

1 个答案:

答案 0 :(得分:0)

通常我们会为CategoriesProducts设置控制器。 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 EditDelete按钮/链接。如果点击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网站,无需修改默认路由或创建新路由。