创建自定义路由层次结构ASP.NET MVC 5

时间:2015-05-17 03:32:10

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

我目前的网址是:

website.com/start/id
website.com/upload/id

这些路线是向导步骤。 我的控制器名为StartController, UploadController,我的视图结构为~Views/Start/Index.cshtml, ~/Views/Upload/Index.cshtml

客户要求他希望网址结构为:

website.com/build/start/id
website.com/build/upload/id

愿望:

  • 我不想使用“vanity url”,因为我想尽可能使用@ Html.ActionLink和@ Url.Action来渲染我的网址,以便稍后重命名控制器和控制器方法那些“连接”@ Html.ActionLink和@ Url.Action更新。

  • 我确实希望将所有方法都放在单个父BuildContoller中,它引用嵌套的View文件夹结构,让我的控制器方法返回以下视图:return View("~/Views/Build/Start/Index.cshtml")。我希望能够将我的View物理结构映射/匹配到我的控制器命名约定,所以返回View();适用于控制器方法。

我的问题:

我是否可以尊重上面的“愿望”并实现此自定义Url结构,而无需创建包含我的StartController方法和UploadController方法的BuildController?

创建BuildController或更改View文件夹和/或控制器的物理结构没有问题,但我想尊重@Url.Action("Start", "Build")的能力而不必在我的代码“{{1”中“手动”编写“更重要的是,保留我的build/startStartController代码,因为我不想在BuildController中使用大量代码。

1 个答案:

答案 0 :(得分:3)

我会切换到属性例程。您必须将ActionLink方法更改为RouteLink方法,但它的工作方式相同。

添加属性

[Route("build/start/{id:int}", Name = "WizardStep1")]

为每个控制器方法(适当地改变路线)。

要生成链接,请使用RouteLink:

@Html.RouteLink("WizardStep1", ...)

使用您需要设置URL属性的附加代码替换....