2017-08-12 1 views
1

Tout d'abord, je lis this question et this question Je pense avoir un autre problème. Parce que tout est pareil.Utilisation des attributs Route dans MVC5

J'ai un projet MVC5. J'ai 2 zones. D'abord, ma classe racine par défaut comme ceci.

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}); 
} 

première zone de configuration config.

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

À ce stade, il n'y a pas de problème. Mais je veux comme ceci:

Cette application/contrôleur

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

Maintenant, je peux accéder comme:

  • localhost/Index/Index OK
  • localhost/App/Index/Index OK
  • localhost/app/accounts/list/45646 ERR OU

Comment puis-je router l'attribut à l'aide de Zones? Je ne peux pas le faire?

+0

'[Route (" app/comptes/liste/{Id} ")]' Modifier en '[Route (" App/accounts/list/{Id} ")]' –

Répondre

0

Vous devez recevoir un entier en tant que paramètre dans la liste ActionResult pour que l'URL 'localhost/app/accounts/list/45646' fonctionne.

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

      return View(); 
     } 
    } 
0

D'abord, vous devez activer l'attribut de routage

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} 
    ); 
} 

Et puis ajoutez les attributs propres au contrôleur

[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(); 
    } 
}