2017-02-15 57 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 } 
     ); 
    } 
}