13

J'essaie de définir l'URL par défaut de mon application MVC sur une vue dans une zone de mon application. La zone est appelée "commun", le contrôleur "Accueil" et la vue "Index".ASP.NET MVC URL par défaut View

J'ai essayé de définir defaultUrl dans la section forms de web.config sur "~/Common/Home/Index" sans succès.

J'ai aussi essayé la cartographie une nouvelle route dans global.asax, ainsi:

routes.MapRoute(
     "Area", 
     "{area}/{controller}/{action}/{id}", 
     new { area = "Common", controller = "Home", action = "Index", id = "" } 
    ); 

Encore une fois, en vain.

+1

sur une enquête plus approfondie, il semble que la demande est dirigé vers le contrôleur approprié (ie MyApp.Areas.Common.Controllers.HomeController) avec ou sans votre modification suggérée. Cependant, dans les deux cas, ViewEngine recherche uniquement les dossiers ~/Views/Home et ~/Views/Shared plutôt que de commencer par ~/Areas/Common/Views/Home et ~/Areas/Common/Views/Shared. Bizarrement, si je crée une page avec un lien ActionLink vers la même méthode de contrôleur (c'est-à-dire Index()), cela fonctionne correctement. Hmmm. –

+0

http://stackoverflow.com/questions/2140208/how-to-set-a-default-route-to-an-area-in-mvc Cela peut aider. J'ai eu un problème similaire. – LiamB

Répondre

12

L'itinéraire que vous avez indiqué ne fonctionne que s'ils tapent explicitement l'URL:

yoursite.com/{area}/{controller}/{action}/{id} 

Qu'est-ce que cette route dit est:

Si je reçois une demande qui a un {area} valide, un {controller} valide cette zone, et un {action} valide dans ce contrôleur, puis l'acheminer là.

Qu'est-ce que vous voulez est par défaut à ce contrôleur si seulement ils visitent votre site, yoursite.com:

routes.MapRoute(
    "Area", 
    "", 
    new { area = "Common", controller = "Home", action = "Index" } 
); 

Ce que cela dit est que s'ils ne recevront rien à http://yoursite.com puis l'acheminer à ce qui suit action: Common/Home/Index

Aussi, mettez-le en haut de votre tableau de routes.

Se assure que vous laissez MVC savoir également enregistrer les zones que vous avez dans l'application:

Mettez ce qui suit dans votre méthode Application_Start dans le fichier Global.asax.cs:

AreaRegistration.RegisterAllAreas(); 
+1

Pour moi, c'est la recherche sur le fichier racine, pas dans la région. – FrenkyB

0

Qu'est-ce que vous êtes faire semble correct. Si je devais deviner je dirais que cela se produit en raison de la façon dont vous exécutez votre site Web. Dans Visual Studio, si vous avez une vue spécifique sélectionnée lorsque vous appuyez sur F5, cette vue sera l'URL de démarrage - essayez de sélectionner le projet, puis appuyez sur F5?

+0

Je crains que ce ne soit pas la cause du problème. Merci pour votre suggestion. –

+0

Ça valait le coup d'essayer: D –

7

Qu'est-ce que vous avez à faire est:

  • Supprimer route par défaut de Global.asax.cs

    //// default route map will be create under area 
    //routes.MapRoute(
    // name: "Default", 
    // url: "{controller}/{action}/{id}", 
    // defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    //); 
    
  • SecurityAreaRegistration.cs de mise à jour dans la zone commune

  • Ajouter un itinéraire suivant cartographie:

    context.MapRoute(
        "Default", 
        "", 
        new { controller = "Home", action = "Index", id = "" } 
    ); 
    
0

Dans le Global.asax , supprimez le.MapRoute

et la faire ressembler à

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

puis sous les yourareaAreaRegistration.cs de la région (il est là si vous avez ajouté la zone par VS)

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    //This is the key one   
    context.MapRoute("Root", "", new { controller = "Home", action = "Login" }); 

    //Add more MapRoutes if needed 
}