2011-09-14 2 views
0

Lorsque vous appelez le return View() dans un contrôleur qui réside dans une zone, il tente de localiser les vues dans le dossier principal ~/Views/{Controller}/ et dans le dossier principal ~/Views/Shared/. Il ne regarde pas dans le dossier ~/{Area}/Views/{Controller}/.asp.net-mvc2 - Contrôleur ne tenant pas compte de la zone lors du renvoi View()

J'ai essayé d'ajouter un routevalue pour area à la fonction MapRoute et aussi essayé d'ajouter un « datatoken » pour « zone » à la propriété DataTokens de la route.

Ai-je raté quelque chose ici?

C'est le MapRoute appel:

routes.MapRoute("Product", "Products/{GroupName}/{CategoryId}/{CategoryName}/{ProductId}/{ProductName}/{PageName}", New With {.Area = "Products", .controller = "Products", .action = "Product", .PageName = ""}, New With {.CategoryId = "[0-9]*", .ProductId = "[0-9]*"}) 
+0

Pouvez-vous publier votre fonction MapRoute? – ericb

+0

J'ai ajouté l'appel à MapRoute – ReFocus

+0

Vérifiez que le nom AreaName remplacé est identique au chemin du dossier Area dans l'application globale. – kaps

Répondre

0

Salut choses en général à regarder:

Avez-vous de la cartographie et de la cartographie enregistrée zone région? avez-vous le même nom pour le contrôleur dans les deux endroits?

l'exemple de cartographie de la zone dans Global.asax
voir ligne: AreaRegistration.RegisterAllAreas(); // Ce fait partie vous neeed faire

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

    routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
    ); 

} 

protected void Application_Start() 
{ 

    AreaRegistration.RegisterAllAreas(); // This is part you neeed to do 
    RegisterRoutes(RouteTable.Routes); 
    ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory()); 
} 

}

et chaque région doit avoir fichier cartographie ou la cartographie quelque part mis en place. Exemple ici

espace de noms de projet { /// /// Inscription de la zone d'administration /// public class AdministratorAreaRegistration: AreaRegistration {/// /// Obtient le nom de la zone à être enregistré. /// /// Nom de la zone à enregistrer. public override string AreaName { get { return "Administrateur"; }}

/// <summary> 
    /// Registers an area in an ASP.NET MVC application using the specified area's context information. 
    /// </summary> 
    /// <param name="context">Encapsulates the information that is required in order to register the area.</param> 
    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Administrator_default", 
      "Administrator/{controller}/{action}/{id}", 
      new { action = "Index", id = UrlParameter.Optional }); 
    } 
} 

}

si vous avez un problème avec le contrôle de routage cela.

Je recommande d'utiliser ce guide, et créer des tests pour chaque routage: Comme nous le faisons habituellement http://haacked.com/archive/2007/12/17/testing-routes-in-asp.net-mvc.aspx

0

avec les zones, nous ajoutons un fichier AeaRegistraion (de FooAreaRegistration.cs) et passer outre AreaName et méthode RegisterArea() . AreaName nous définissons le chemin relatif du dossier où réside le fichier AearRegistration par rapport à l'application globale. Voici un exemple.

public class FooAreaRegistration : AreaRegistration 
{ 
    /// <summary> 
    /// Get the Area Name 
    /// </summary> 
    public override string AreaName 
    { 
     get { return "ParentApp/AreaFolder"; } 
    } 

    /// <summary> 
    /// Map and Route the area 
    /// </summary> 
    /// <param name="context"></param> 
    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     if (null != context) 
     { 
      //context.maproute goes here    
     }    
    } 
} 
Questions connexes