我正在使用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
为什么......为什么:'(它不起作用?为什么它只适用于第一条路线而不是 对于新增加的一个?!
祝你好运, 丹
答案 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都可以保持不变。