我不确定如何表达这一点,但我在RoR应用程序中经常看到的一种模式是这样的:
/后/帖子ID /注释/ commentid
或
/项目/专案编号/任务/ taskid的
基本上在模型中,因为Project有Tasks,你可以从项目资源中访问TaskController。
现在我已经开始使用MVCContrib的SimplyRestfulRouting和ASP.NET MVC了,所以我有以下格式:
路线=>操作
/ {Controller} =>指数()
/ {Controller} / {id} =>展()
我不会深入了解所有细节,任何人都可以谷歌SimplyRestfulRouting看到。我想知道是否有一致的方式允许:
/ {Controller} / {id} / {Controller} / {id}类型语法。
显然,如果这是一个超过配置风格的约定而不仅仅是设置大量路线,那将是理想的。
答案 0 :(得分:0)
我喜欢这个概念,我想转到/ Project / ProjectId / Tasks并查看该项目的任务的过滤视图。就个人而言,我并不介意,如果“特定于项目”的视图(例如details / show / update / etc)返回/ Task / TaskId。
但是,我确实看到它如何对“依赖”类型有益,例如当一个任务在没有项目的情况下不存在时,可以通过/Project/ProjectId/Tasks/TaskId访问它们。 p>为了实现我的版本,我在Project控制器中有一个Action,如下所示:
public ActionResult Tasks(string id)
{
Project projectToDisplay = Repository.GetProject(id);
ViewModel["Tasks"] = Repository.GetTasksForProject(projectToDispaly);
return View(projectToDisplay);
}
显然,使用强类型的ViewModel可以改善这种情况。
作为参考,我的存储库(特定于实体框架)具有以下代码:
public Project GetProject(int id)
{
return _entities.Projects.FirstOrDefault(m => m.Id == id);
}
public IList<Task> GetTasksForProject(Project project)
{
return _entities.Tasks.Where(m => m.Project.Id == project.Id).ToList();
}
或者,使用Entity Framework,您可以在存储库中执行以下操作:
public Project GetProject(int id)
{
return _entities.Projects.Include("Tasks").FirstOrDefault(m => m.Id == id);
}
然后控制器只需要:
public ActionResult Tasks(string id)
{
return View(Repository.GetProject(id));
}
这是ViewModel-esque的一点点。
(注意:此代码已经适应了您的项目/任务上下文,因此它不是我的实际代码。如果此代码不起作用或有错误,我道歉,我已经有效地重写了它,所以那里可能是拼写错误/等。)
答案 1 :(得分:0)
我找到了答案,这是Steve Hodgekiss的“Restful Routes”。它比MVCContrib附带的灵活性更灵活,并允许我正在谈论的那种东西,以及更多。
http://stevehodgkiss.com/2009/10/11/restful-routes-for-asp-net-mvc.html