MVC路由多个控制器

时间:2012-09-10 01:00:16

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

我正在使用MVC 4.0,我正在尝试为每个控制器添加路由。

好吧,我的第一个控制器名为CustomersController。我的路线 补充道是:

    routes.MapRoute(
        name: "Customer",
        url: "{controller}/{action}/{IdCustomer}",
        defaults: new { controller = "Customers", action = "Index", IdCustomer = UrlParameter.Optional }
    );

当我运行应用程序时,我在索引页面(列表)中获得以下链接:

http://localhost:6838/Customers/Create/5
http://localhost:6838/Customers/Edit/5
http://localhost:6838/Customers/Details/5
http://localhost:6838/Customers/Delete/5

好的,太棒了!这是我正在寻找的,但是,现在开始我的问题。我又添了一个 控制器,称为ItemsController(具有相同的操作 - 创建/编辑/详细信息/删除)然后我尝试添加相同的路线:

    routes.MapRoute(
        name: "Item",
        url: "{controller}/{action}/{IdItem}",
        defaults: new { controller = "Items", action = "Index", IdItem = UrlParameter.Optional }
    );

但现在结果不同了......我得到以下链接:

    http://localhost:6838/Items/Create?IdItem=1
    http://localhost:6838/Items/Edit?IdItem=1
    http://localhost:6838/Items/Detail?IdItem=1
    http://localhost:6838/Items/Delete?IdItem=1

为什么......为什么:'(它不起作用?为什么它只适用于第一条路线而不是 对于新增加的一个?!

祝你好运, 丹

1 个答案:

答案 0 :(得分:2)

为了给出我的答案的概要,你的路线太模糊了。您需要更具体地获得更好的结果(特别是如果您没有按名称使用路线)。我会选择以下内容:

routes.MapRoute(
    name: "Customers",
    url: "Customers",
    defaults: new { controller = "Customers", action = "Index" }
);
routes.MapRoute(
    name: "CustomerDetails",
    url: "Customer/{IdCustomer}",
    defaults: new { controller = "Customers", action = "Details", IdItem = UrlParameter.Optional }
);
routes.MapRoute(
    name: "CustomerEdit",
    url: "Customer/{IdCustomer}",
    defaults: new { controller = "Customers", action = "Edit", IdItem = UrlParameter.Optional }
);
/* and so on (then move on to Items) */

现在您可以按名称引用它们,并消除您通常提供的大量基本信息(如操作和控制器详细信息)。它还可以在路由命名时更轻松地更新链接,而不是明确的控制器/操作。

@Html.RouteLink("Edit Customer", "CustomerEdit", new { IdCustomer = model.Id });

您现在可以在不同的区域进行此操作,或者让其他控制器稍后通过更改您定义的路径来处理它,并且所有的RouteLink都可以保持不变。