我有2个型号。
客户和商店模式。 顾客可以有很多商店。
我为两者创建了基本/脚手架控制器和视图。
因此,客户控制器具有索引,创建,编辑,删除操作。
在我的客户索引视图中,我希望每个客户都有一个“商店”的链接,这些链接将转到“存储”索引页面,只是它会显示该客户的列表......
现在通常我们有URL模式,例如
/Customer/Create
/Customer/Details/Id
/Customer/Edit/Id
如上所述,我希望编辑/删除/详细信息旁边的商店链接可以像
一样工作 /Customer/1/Store/Index
/Customer/1/Store/Create
/Customer/1/Store/Edit/1
我的网址构建可能不对,但这是我的想法。如何实现这种行为。我是否在客户控制器中创建商店功能?我很困惑,那么我将如何实现/ Customer / 1 / Store / Edit / 1这种行为......
我正在寻找阅读材料,因为我不确定要搜索什么。而且,URL模式不是我想要的...我正在寻找一种简单的方法来实现它。不知道这是否有意义..
答案 0 :(得分:1)
asp.net mvc中的路由非常灵活。使用模板项目(以及许多示例),您将获得以下路线:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
为控制器提供类似/Customer/Edit/1
的网址"客户",操作"编辑",ID" 1"。
但你不必遵循这种模式。所以你可以这样做:
routes.MapRoute(
name: "Store",
url: "Customer/{customerId}/Store/{action}/{storeId}",
defaults: new { controller = "Store", action = "Index", storeId = UrlParameter.Optional, customerId = 0 }
);
然后在Store
控制器中创建一个操作方法,如:
public ActionResult Edit(int customerId, int storeId) { ... }
让您使用路线/Customer/1/Store/Edit/3
请记住,即使稍后定义了更好的匹配,可能匹配的第一个路由也会匹配。