2010-03-26 7 views
0

J'ai deux zones différentes, et j'ai un itinéraire dans une de ces zones qui est spécifique à cette zone, mais j'ai besoin de générer un lien vers cette route en utilisant Html.RouteLink d'une autre zone (c'est comme ça que nouvelle zone) mais cela ne fonctionnera pas ... Il ne semble pas possible d'utiliser RouteLink pour des routes dans une zone différente.Comment générer un RouteLink vers un itinéraire dans une zone différente?

Quel est le meilleur moyen de contourner le problème? Devrais-je simplement définir une nouvelle route dans l'autre zone et la nommer différemment?

MISE A JOUR (code):

Dans la page principale dans la zone principale (je l'ai essayé plusieurs façons, tous ont produit même résultat):

<a href="<%= Url.Action("Index", "Home", new { area = "CustomerSite", route = "CustomerSite_preview", domain = (string)ViewData["DomainName"] }, null) %>"> 

Dans le CustomerSite enregistrement de zone comme première route enregistrée:

 context.MapRouteLowercase(
      "CustomerSite_preview", 
      "preview/{domain}/{controller}/{action}/{id}", 
      new { area = "CustomerSite", controller = "Home", action = "Index", id = "" }, 
      new { isCustomerSite = new CustomerSiteRouteConstraint() }, 
      new string[] { "GrayHills.CarLotHosting.Web.Areas.CustomerSite.Controllers" } 
     ); 
+0

Cela ne devrait vraiment pas être si difficile ... Je ne comprends pas –

+0

Pouvez-vous poster votre code? J'utilise RouteLink et ça marche bien. – Ahmad

+0

RouteLink fonctionne très bien tant que vous créez un lien vers une zone dans laquelle vous vous trouvez, mais pas dans une autre zone ... Je posterai mon code après un certain temps –

Répondre

1

Dans votre objet route, vous avez juste besoin d'une propriété nommée zone avec le nom de la zone.

Html.RouteLink("My Link Text", 
       new { area = "MyArea", controller = "MyController" ... }, 
       null); 
+0

J'ai ça. Cela n'aide pas. –

+0

Je ne suis pas sûr si c'est juste quelque chose avec la méthode 'RouteLink' alors, mais jetez un oeil à http://msdn.microsoft.com/en-us/library/ee671793(VS.100).aspx et envisager d'utiliser 'ActionLink' à la place? –

+0

C'est un itinéraire personnalisé: example.com/preview/somedomain.com/ donc je ne pense pas que l'actionlink puisse le faire –

0

Vous devez changer votre définition d'itinéraire - voir la réponse ASP.NET MVC Url.Action routing error pour plus d'informations.

Essentiellement, votre itinéraire devrait se présenter comme suit puisque vous fournissez explicitement le nom du contrôleur et de l'action:

context.MapRouteLowercase(
     "CustomerSite_preview", 
     "preview/{domain}/home/index/", 
     new { area = "CustomerSite" 
       , controller = "Home" 
       , action = "Index"}, 
     new { isCustomerSite = new CustomerSiteRouteConstraint() }, 
     new string[] { 
      "GrayHills.CarLotHosting.Web.Areas.CustomerSite.Controllers"} 

Le Url.Action ressemblera

<a href="<%= Url.Action("Index" 
         , new {domain = (string)ViewData["DomainName"] } 
         , null) %>"> 

qui se traduira par une URL comme http://localhost:56291/preview/somedomainname/home/index