33

Comment utiliser un Area dans ASP.NET Core? Ce n'est pas correctement documenté! Supposons que j'ai une application nécessitant une section Admin. Cette section nécessite que ses Vues soient des lieux dans cette zone. Toutes les demandes commençant par Admin/ devront être redirigées vers cette zone.Comment utiliser une zone dans ASP.NET Core

Répondre

41

Afin d'inclure une zone dans une application ASP.NET de base, nous devons d'abord comprendre une voie classique dans le fichier Startup.cs (il est préférable de le placer avant toute voie non-zone):

Dans démarrage .cs/Configurer la méthode:

app.UseMvc(routes => 
{ 
    routes.MapRoute("areaRoute", "{area:exists}/{controller=Admin}/{action=Index}/{id?}"); 

    routes.MapRoute(
     name: "default", 
     template: "{controller=Home}/{action=Index}/{id?}"); 
}); 

Ensuite, créez un dossier nommé Areas dans la racine de l'application et faire une autre nom Admin dans l'ancien, font également ces dossiers à l'intérieur Admin (ViewComponent est facultatif):

enter image description here

Maintenant, nous créons un contrôleur dans le dossier Controllers nommé AdminController, le contenu peut être comme:

[Area("Admin")] 
[Route("admin")] 
public class AdminController : Controller 
{ 
    public AdminController() 
    { 
     // do stuff 
    } 

    public IActionResult Index() 
    { 
     return View(); 
    } 

    [Route("[action]/{page:int?}")] 
    public IActionResult Orders() 
    { 
     return View(); 
    } 

    [Route("[action]")] 
    public IActionResult Shop() 
    { 
     return View(); 
    } 

    [Route("[action]/newest")] 
    public IActionResult Payments() 
    { 
     return View(); 
    } 
} 

Maintenant, pour que cela fonctionne, vous aurez besoin de créer des vues pour toutes les actions qui en renvoient une. La hiérarchie des vues est comme ce que vous avez dans un dossier Vues non-zone:

enter image description here

Maintenant, vous devriez être bon d'aller!

Question: Et si j'ai quoi avoir un autre contrôleur dans ma zone?

Réponse:

Ajoutez juste à côté d'un autre contrôleur AdminController et assurez-vous que les routes sont comme les suivantes:

[Area("Admin")] 
[Route("admin/[controller]")] 
public class ProductsController : Controller 
{ 
    public ProductsController() 
    { 
     // 
    } 

    [Route("{page:int?}")] 
    public IActionResult Index() 
    { 
     return View(); 
    } 
} 

La partie importante est [Route("admin/[controller]")]. Avec cela, vous pouvez garder le style de routage à admin/controller/action/...

+0

Ceci est testé sur RC1, RC2 et 1.0. Cela fonctionne totalement. – VSG24

+0

J'ai créé un échantillon comme vous le montre ci-dessus et ajouter une zone d'administration, cela fonctionne bien, mais quand j'ai publié mon projet, il ne publie pas la zone admin et les vues et fichiers, comment puis-je gérer? – motevalizadeh

+0

@motevallizadeh, Une autre question à moi! https://stackoverflow.com/questions/37326068/asp-net-core-rc2-area-not-published – VSG24