2017-02-15 59 views
0

我在下面的控制器中指定了一个包含与动作过载相匹配的参数的路由。在剃刀视图中创建URL属性包含参数的路由

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

我试图创建一个使用@Html.ActionLink相匹配的控制器上指定的路线,例如localhost:55416/Organisations/2/Employees在Razor视图的URL,但我没有能够得到它的工作。

我已经能够获得最接近的是localhost:55416/Organisations/Employees/2的路线是错误的不正常工作,或localhost:55416/Organisations/Employees?id=2其实际工作的组织控制器上的员工的行动被击中,但当时它只是一个查询字符串,然后这首先否定了添加[Route("organisations/{id}/employees")]路线的目的。

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

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

有没有一种方法可以让我按照我想要的方式使用ActionLink来生成URL,还是有另一种方法我需要去做这件事?

+1

你试过'@ Html.ActionLink( “myLink的”, “员工”, “组织”,新{ID = 2},NULL)' –

+0

@sam,喜有,我有,当使用' @ Html.ActionLink(“Employees”,“Employees”,“Organizations”,new {id = item.Id},null)'我得到localhost:55416/Organizations/Employees/2 URL。 – user3706626

+0

你可以提交你的'RouteConfig'类吗? –

回答

0

信用应该去Sam,他提供的ActionLink是正确的,当我尝试它时没有起作用的原因是因为我没有将routes.MapMvcAttributesRoutes();行添加到我尝试的项目的RouteConfig.cs中创建网址后,在添加之后,预期的localhost:55416/Organisations/2/Employees网址将由@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 } 
     ); 
    } 
}