【问题标题】:How to call MVC routes from the View如何从视图调用 MVC 路由
【发布时间】:2014-11-14 18:10:47
【问题描述】:

我遇到了在当前 URL 上添加 URL 的问题,例如: 本地主机/配置 -> 本地主机/配置/配置文件 通过调用@Html.ActionLink(Resources.General.Achievements, "Index", "Profile")

当我真正想要的是:Localhost/Profile

我知道这可以使用 MVC 路由,但我只是不知道如何从视图中调用它们。我使用了 Html.BeginRouteForm,但提交时不会触发此路由。

这是我的路线配置

routes.MapRoute(
            name: "Profile",
            url: "Profile/{id}",
            defaults: new { controller = "Profile", action = "Index" },
            namespaces: new[] { "Cobalt.Controllers" }
            );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            namespaces: new[] { "Cobalt.Controllers" }
            );

我正在尝试访问根目录中的配置文件控制器和索引操作。我同时拥有配置和管理区域,在调用根目录中的控制器时,我试图摆脱它们。

提前感谢您的帮助

【问题讨论】:

  • 您定义的当前路线是什么?请指定您的控制器和操作是什么。然后指定要匹配的网址。
  • 我为你更新了我的问题。
  • 你想要@Html.RouteLink(): msdn.microsoft.com/en-us/library/…

标签: c# asp.net asp.net-mvc asp.net-mvc-5 asp.net-mvc-routing


【解决方案1】:

在处理区域时,如果你想从一个区域移动到另一个区域或从一个区域移动到根,你可以使用 ActionLink 的重载,它允许你指定路由数据并传递一个空字符串(或适当的区域名称)进入区域:

@Html.ActionLink(Resources.General.Achievements, "Index", "Profile", new { area = string.Empty })

【讨论】:

    【解决方案2】:

    使用RouteLink:

    @Html.RouteLink(Resources.General.Achievements, "Profile", new { id = "1234" })
    

    请注意,由于您的“id”参数未在 Profile 路由中声明为可选参数,因此除非您提供它,否则它将不匹配。

    【讨论】:

    • 您的两种解决方案都有效,但如果可能的话,我想避免定义多条路线只是为了穿过区域。从那以后,我发现我的问题更多的是在这些地区而不是在路线上。不过谢谢!
    猜你喜欢
    • 2019-06-12
    • 2019-02-18
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 2014-02-14
    • 1970-01-01
    相关资源
    最近更新 更多