【问题标题】:Create URL in Razor View for Attribute Route containing parameters在 Razor 视图中为包含参数的属性路由创建 URL
【发布时间】:2017-02-15 17:51:30
【问题描述】:

我在下面的控制器中指定了一个路由,其中​​包含一个与动作重载匹配的参数。

public class OrganisationsController : Controller
{
    [HttpGet]
    [Route("organisations/{id}/employees")]
    public ActionResult Employees(int id)
    {
        //  Some code here
    }
}

我正在尝试使用 @Html.ActionLink 在 Razor 视图中创建 URL 以匹配控制器上指定的路由,例如 localhost:55416/Organisations/2/Employees,但我无法使其正常工作。

我能得到的最接近的是localhost:55416/Organisations/Employees/2,因为路线错误,它不起作用,或者localhost:55416/Organisations/Employees?id=2,它实际上在组织控制器上的员工操作被击中时起作用,但它只是一个然后查询字符串否定了首先添加[Route("organisations/{id}/employees")] 路由的目的。

我在互联网上找到的所有示例和帖子都处理末尾的参数,例如[Route("organisations/employees/{id}")],而不是在控制器和操作之间。

我没有为尝试将自定义路由添加到RouteConfig 而烦恼,因为在我看来,URL 是根据控制器上指定的路由首先需要正确的起点,还是我错了?

有没有办法让我按照我希望的方式使用ActionLink 生成 URL,或者我需要另一种方式来执行此操作?

【问题讨论】:

  • 你试过@Html.ActionLink("myLink", "Employees","Organisations",new { id = 2 },null)
  • @sam,嗨,是的,我有,当使用 @Html.ActionLink("Employees", "Employees", "Organisations", new { id = item.Id }, null) 时,我得到了 localhost:55416/Organisations/Employees/2 URL。
  • 你能提交你的RouteConfig类吗?
  • @sam 你的传奇,我有一个解决方案,有两个独立的项目,一个用于 MVC WebApp,一个用于 WebAPI,我现在看到我只在 WebAPI 的 RouteConfig.cs 中添加了routes.MapMvcAttributeRoutes();也不适用于 MVC WebApp,这是我试图创建 URL 的地方。我添加了它,上面的 ActionLink 现在正在生成正确的 localhost:55416/organisations/2/employees url。

标签: asp.net-mvc razor asp.net-mvc-5 attributerouting


【解决方案1】:

Credit应该归Sam所有,他提供的ActionLink是正确的,当我尝试它时它不起作用的原因是因为我没有在我所在项目的RouteConfig.cs中添加routes.MapMvcAttributesRoutes();行尝试创建 URL,添加后预期的 localhost:55416/Organisations/2/Employees url 由 @Html.ActionLink("Employees", "Employees", "Organisations", new { id = item.Id }, null) 操作链接生成。

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapMvcAttributeRoutes();

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

【讨论】:

    猜你喜欢
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 2013-10-14
    • 2011-11-07
    • 2020-04-03
    • 2020-03-24
    相关资源
    最近更新 更多