【问题标题】:Designing MVC URL scheme for hierarchical system为分层系统设计 MVC URL 方案
【发布时间】:2010-12-16 01:46:24
【问题描述】:

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

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

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

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

/Author/Rooms/CreateIn/[mapID] ?

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

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

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

谢谢。

【问题讨论】:

    标签: model-view-controller theory asp.net-mvc-routing hierarchical-data


    【解决方案1】:

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

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

    由于这是我只希望用于 RoomsController 的路由,我不会在该路由中使用 {controller} 参数。只需在路由的默认对象中将控制器设置为“Rooms”即可。

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

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

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

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

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

    【讨论】:

    • 是的,可以。这也很有意义,因为数据的层次结构与 URL 层次结构相匹配。存在无效 URL 的可能性是否重要 - 因为您可能有一个不属于指定 mapID 的 roomID?我想无论 URL 中的内容如何,​​都必须获得提供房间 ID 的正确地图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 2012-04-01
    • 2022-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    相关资源
    最近更新 更多