如何在ASP.NET MVC中创建指向自定义路由的ActionLink?

4

我有一个位于区域内的自定义路由:

[RouteArea("MyArea")]  
public class MyController: Controller
{
    [Route("~/my-action")]
    public ActionResult MyAction()
    {
        return View();
    }
}

在添加 RouteRouteArea 属性之前,我通过以下路由访问此操作:
~/MyArea/MyController/MyAction

现在我添加了这些属性,我可以通过以下方式访问它:

~/my-action

我曾经有一个ActionLink指向这个操作,它看起来像这样:

@Html.ActionLink("Link To My Action", "MyAction", "My", new { Area = "MyArea" }, new { })

现在这个ActionLink已经不能正常工作了,我该怎么修复它?

1
你的 ActionLink 永远不会生效 - 你的控制器名字是 MyController,所以需要这样写才行 @Html.ActionLink("Link To My Action", "MyAction", "My", new { Area = "MyArea" }, new { }) - user3559349
抱歉,这只是一个例子,在更改区域、控制器和操作的名称时我犯了一个错误。在我的真实代码中,这是正确的,并且我也在我的问题中修复了它。 - Yulian
1
你正在使用属性路由,你是否已经在RouteConfig.cs文件中像这样初始化了这个功能:在RegisterRoutes方法中添加routes.MapMvcAttributeRoutes() - Marko Jovanov
是的,我已经初始化了它。 - Yulian
我之前在使用“传统路由”和“属性路由”时遇到了冲突 - 如果你还有任何它的痕迹,或许尝试移除“传统路由”,只使用“属性路由”会更好? - Marko Jovanov
你的意思是我应该从整个网站中删除传统路由吗? - Yulian
1个回答

10

我想出了以下的解决方案:

我给我创建的路由添加了一个名称。

[Route("~/my-action", Name = "CustomRoute")]
public ActionResult MyAction()

然后我使用了RouteLink辅助方法,而不是像这样使用ActionLink:

@Html.RouteLink("Link To My Action", "CustomRoute")

因此,RouteLink方法的第一个参数是链接文本,第二个参数是路由的名称 - 与您在Route属性中设置的名称相同。


1
对我来说,只使用@Url.RouteUrl("CustomRoute")就足够了。 - Alex Podworny
使用@Url.RouteUrl添加<a>标签帮助了我,谢谢Alex。 - IceeFrog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接