想象一下,我正在使用MVC Web应用程序构建一个多用户地牢系统。为了描述玩家可以探索的区域,系统可以包含许多地图,其中包括房间和门 - 其中门连接两个房间。 考虑系统的创作部分。创建地图很简单 - 我需要以下网址:
/Author/Maps (an index of my maps) /Author/Maps/Create (a new Map) /Author/Maps/Detail/3 (show Map details) /Author/Maps/Edit/3 (edit map details)
使用路由方案:/ Author / {controller} / {action} / {ID}
这是我需要帮助的房间的网址。在创建新房间时,我需要知道我正在创建它的地图。
/Author/Rooms/CreateIn/[mapID] ?
然后编辑房间的详细信息:
/Author/Rooms/Edit/[roomID] /Author/Rooms/Detail/[roomID]
此路由方案是否有效?列出Map的所有房间的视图是否应该是Rooms控制器上的“Index”操作,传入MapID或Map控制器上的“Rooms”操作?
感谢。
答案 0 :(得分:5)
我不知道这是不是最佳做法,但我会这样做:
添加新路线:/Author/Maps/{mapID}/Rooms/{action}/{roomID}
由于这是我只希望用于RoomsController的路由,因此我在该路由中不会有{controller}
参数。只需将控制器设置为路径默认对象中的“房间”。
然后,您的RoomsController中的所有操作都会知道他们正在使用哪个地图。
RoomsController的默认索引操作可以是指定地图的所有会议室的列表。
“创建”操作看起来像Create(int mapID)
,“详细信息”操作看起来像Details(int mapID, int roomID)
编辑关于mapID和roomID不匹配的无效网址,您可以忽略mapID,但我认为更好的流程是验证指定的mapID是否正确并显示错误消息如果不是。
编辑2:(关于mapID和roomID之间关系的其他想法) 你可以在给定的地图中使roomID唯一。因此,地图5,房间3将是与地图8,房间3不同的房间。