2017-08-12 68 views
1

首先,我讀了this questionthis question 我想我有另一個問題。因爲一切都是一樣的。在MVC5中使用路由屬性

我有MVC5項目。我有2個領域。 首先,我的默認根類是這樣的。

public static void RegisterRoutes(RouteCollection routes) 
{ 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Welcome", action = "Index", id = UrlParameter.Optional}); 
} 

第一區域路由配置。

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "App_default", 
     "App/{controller}/{action}/{id}", 
     new { action = "Index", id = UrlParameter.Optional } 
    ); 
} 

在這一點上,是沒有問題的。不過,我想是這樣的:

這個應用程序/控制器現在

public class AccountsController : Controller 
{ 
    // GET: App/Accounts 
    [Route("app/accounts/list/{Id}")] 
    public ActionResult List() 
    { 
     return View(); 
    } 
} 

,我可以訪問諸如:

  • 本地主機/索引/索引OK
  • 本地主機/應用/索引/ Index OK
  • localhost/app/accounts/list/45646 ERR或

如何使用區域路由屬性?我做不到?

+0

'[路線(「應用程序/帳號/列表/ {ID} 「)]'更改爲'[Route(」App/accounts/list/{Id}「)]' –

回答

0

爲了使'localhost/app/accounts/list/45646'URL正常工作,您需要在List ActionResult中接收一個整數作爲參數。

public class AccountsController : Controller 
{ 
    // GET: App/Accounts 
    [Route("app/accounts/list/{Id}")] 
    public ActionResult List(int Id) 
    { 

      return View(); 
     } 
    } 
0

首先您需要啓用屬性路由

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

     //Enable attribute routing 
     routes.MapMvcAttributeRoutes(); 

     //Area registration should be done after 
     //attribute routes to avoid route conflicts 
     AreaRegistration.RegisterAllAreas(); 

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

然後適當的屬性添加到控制器

[RouteArea("AreaName", AreaPrefix = "app/accounts")] 
public class AccountsController : Controller { 
    [HttpGet] 
    [Route("list/{id:int}")] // Matches GET app/accounts/list/45646 
    public ActionResult List(int id) { 
     return View(); 
    } 
}