0

我做 ASP.NET 已经有一段时间了,在 MVC 方面做得很少(一般来说),但在 ASP.NET MVC 框架方面非常新,以及一些事情的正确术语。

这是我的示例(我正在处理的实际应用程序不同,但这是我可以使用的公共示例) - 我想创建一个更简单的Redmine版本,但在 .net 中。

我想列出问题,如果我访问 example.org/issues,我会看到所有项目的所有问题列表(类似于http://www.redmine.org/issues)。

但是如果我去这个项目,例如 example.org/project/issues,我只会看到那个项目的问题(类似于http://www.redmine.org/projects/redmine/issues)。对于 example.org/project2/issues 等,这将是相同的。

什么是正确的术语?我会假设开发人员没有在两个地方重写“问题”代码,他们重用了这段代码。

由于我不知道完全正确的术语,因此很难在 ASP.NET MVC 世界中找到我可以开始使用的好的示例。所以第二部分是我可以在 ASP.NET MVC 中查看的示例,在 Visual Studio 中对我来说应该如何?

/project/ 下还有其他一些内容,例如设置、详细信息、日志等,类似于浏览http://www.redmine.org/projects/redmine/的方式。

最后,如果项目不在顶层怎么办?例如,如果我的应用程序更像:

example.org/
example.org/projects/
example.org/projects/project1
example.org/projects/project1/issues
example.org/projects/project2
example.org/dashboard/
4

2 回答 2

2

设置一个你想要的控制器(我将使用 RedMineController)。

在该控制器中,您将拥有一个名为 ListIssues 的单一操作方法。接受一个名为 ProjectName 的参数:

public ActionResult ListIssues(string projectName) {}

最后在 global.asax.cs 中创建两条路由:

routes.MapRoute(
    "Issues Root",
    "issues",
    new { controller = "RedMine", action = "ListIssues" }
);

routes.MapRoute(
    "Project Issues",
    "projects/{projectName}/issues",
    new { controller = "RedMine", action = "ListIssues" }
);

在您的 ListIssues 操作中,检查 projectName == null 是否,如果是,则获取所有问题,否则获取特定问题。第一个路由将传递 null,第二个将传递 URL 中的内容。如果 URL 中的项目名称无效,请不要忘记抛出 404。

希望这可以帮助!

于 2012-05-11T20:37:49.110 回答
0

好吧,虽然不是一个正确的答案。但是你可以通过改变你做它们的方式来轻松地做你想做的事情.. 即
,而不是做www.example.org/project/issues或者www.example.org/issues/project只是www.example.org/issues
这样你可以轻松地制作一个issues控制器,并且 URL 中的所有内容都issues可以是这个字符串,你可以通过它以确定您需要列出所有问题的资源。它的示例路线可以是

"{issues}/{*resource}",new{controller="issues"}


于 2012-05-11T15:56:03.800 回答