在 MVC 中嵌套/路由视图的正确术语和示例 ASP.NET

本文关键字:术语 NET ASP MVC 嵌套 视图 路由 | 更新日期: 2023-09-27 18:33:49

我已经做了一段时间 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世界中找到我可以开始的好例子。所以第二部分,是我可以在MVC中看到的示例 ASP.NET,以及这在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/

在 MVC 中嵌套/路由视图的正确术语和示例 ASP.NET

设置一个随心所欲的控制器(我将使用 RedMineController(。

在该控制器中,你将有一个名为 ListIssues 的单个操作方法。接受名为项目名称的参数:

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。

希望这有帮助!

虽然不是一个合适的ans.但是你可以很容易地做你想做的事,只需扭转你做它们的方式。
而不是做www.example.org/project/issueswww.example.org/issues/project或只是www.example.org/issues
通过这种方式,您可以轻松地创建一个issues控制器,并且issues之后URL中的所有内容都可以是此字符串,通过该字符串,您可以确定需要列出所有问题的资源。它的示例路由可以是

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