0

ASP.NET MVC 3 路由让我感到困惑。我觉得我已经阅读了所有我能读到的东西,但有时,我还是不明白。我正在尝试创建一个可以访问的 URL,看起来像

/authorized/home/children/{childID}

我希望该 URL 显示为特定子项加载内容的 HTML 视图。我的观点定义如下:

/Views/Authorized/Home/Children/Child.cshtml

在我的 global.asax.cs 文件中,我添加了以下路线:

  routes.MapRoute(
    "Child", // Route name
    "{controller}/Home/Children/{action}/{id}",
    new { controller = "Authorized", action = "Child", id = UrlParameter.Optional }
  );

在 AuthorizedController.cs 中,我有以下内容:

public ActionResult Child(string id)
{
  return View("~/Views/Authorized/Home/Children/Child.cshtml");
}

如果我访问 /authorized/home/children,我会看到 Child.cshtml 的内容。但是,如果我访问 /authorized/home/children/1,我会得到 404。

我究竟做错了什么?谢谢

4

1 回答 1

2

您共享的路线与您所说的想要的路线不匹配。

你要:

/authorized/home/children/{childID}

但是,您的路线期待:

/Authorized/Home/Children/{action}/{id}

请注意那里的附加操作参数。孩子是你在控制器中的动作,还是孩子?如果是孩子,你应该更新你的路线:

 routes.MapRoute(
    "Child", // Route name
    "{controller}/Home/{action}/{id}",
    new { controller = "Authorized", action = "Children", id = UrlParameter.Optional }
  );

但是,如果是 Child,您需要从您的路线中删除 {action},如下所示:

 routes.MapRoute(
    "Child", // Route name
    "{controller}/Home/Children/{id}",
    new { controller = "Authorized", action = "Child", id = UrlParameter.Optional }
  );

这将创建一个明确的路线,指向 Child 动作。

于 2012-08-08T13:29:05.987 回答