为分层系统设计MVC URL方案

GC.*_*GC. 4 theory model-view-controller asp.net-mvc-routing hierarchical-data

所以想象一下,我正在使用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}

这是我需要帮助的房间的URL.在创建一个新的房间时,我需要知道我正在创建它的地图.

/Author/Rooms/CreateIn/[mapID] ?

然后编辑房间的详细信息:

/Author/Rooms/Edit/[roomID]
/Author/Rooms/Detail/[roomID]

这种路由方案是否有效?列出Map的所有房间的视图是否应该是Rooms控制器上的"Index"操作,传入MapID或Map控制器上的"Rooms"操作?

谢谢.

Cod*_*nis 5

我不知道这是不是最佳做法,但我会这样做:

添加新路线: /Author/Maps/{mapID}/Rooms/{action}/{roomID}

由于这是我只希望用于RoomsController的路线,因此我不会{controller}在该路线中有参数.只需将控制器设置为路径默认对象中的"房间"即可.

然后,您的RoomsController中的所有操作都将知道他们正在使用哪个地图.

RoomsController的默认Index操作可以是指定地图的所有Rooms的列表.

Create操作看起来像Create(int mapID),Details操作看起来像Details(int mapID, int roomID)

编辑:关于mapID和roomID不匹配的无效网址,您可以忽略mapID,但我认为更好的过程是验证指定的mapID是否正确并显示错误消息(如果不是).

编辑2 :(关于mapID和roomID之间关系的其他想法)你可以在给定的地图中使roomID唯一.因此,地图5,房间3将是与地图8,房间3不同的房间.