4

所以想象一下,我正在使用 MVC Web 应用程序构建一个多用户 Dungeon 系统。为了描述玩家可以探索的区域,系统可以包含许多地图,这些地图将由房间和门组成——门连接两个房间。考虑系统的创作部分。创建地图很容易 - 我需要如下 URL:

/Author/Maps(我的地图的索引)
/作者/地图/创建(新地图)
/Author/Maps/Detail/3(显示地图详细信息)
/Author/Maps/Edit/3(编辑地图详情)

使用路由方案:/Author/{controller}/{action}/{ID}

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

/Author/Rooms/CreateIn/[mapID] ?

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

/作者/房间/编辑/[房间 ID]
/作者/房间/详细信息/[房间 ID]

这种路由方案会起作用吗?列出地图所有房间的视图应该是房间控制器上的“索引”操作,传入 MapID,还是地图控制器上的“房间”操作?

谢谢。

4

1 回答 1

5

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

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

由于这是我只希望用于 RoomsController 的路由,因此我不会{controller}在该路由中包含参数。只需在路由的默认对象中将控制器设置为“房间”。

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

RoomsController 的默认 Index 操作可以是指定地图的所有房间的列表。

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

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

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

于 2009-11-12T21:33:01.743 回答