À L'Aide De L'Url.RouteUrl() avec des Noms de routes dans une Zone

Comme une note de côté, je comprends tout ambigu noms de contrôleur problème et ont utilisé namespacing pour obtenir mes itinéraires de travail, donc je ne pense pas que c'est un problème ici.

Jusqu'à présent j'ai mon projet contrôleurs de niveau et ensuite, un Utilisateur de la Zone avec la suite de l'enregistrement:

public class UserAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "User";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "UserHome",
            "User/{id}",
            new { action = "Index", controller = "Home", id = 0 },
            new { controller = @"Home", id = @"\d+" }
        );

        context.MapRoute(
            "UserDefault",
            "User/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
        );
    }
}

La "UserHome" la route est là, alors je peux laisser la route /User/5 vs /User/Home/Index/5 qui semble plus propre de l'OMI.

Idéalement, je voudrais utiliser Url.RouteUrl("UserHome", new { id = 5 }), pour générer de la route d'ailleurs, mais c'est toujours vient soit de retour vide ou me donne une exception en disant qu'il ne peut pas trouver le nom de la route, ce qui est évidemment là.

Cependant quand j'utilise Url.RouteUrl("UserHome", new { controller = "Home", action = "Index", id = 5 }) il fonctionne sans problème.

Pourquoi dois-je spécifier l'action de contrôleur et quand ils ont des valeurs par défaut déjà dans la voie de la cartographie? Ce qui me manque?

Essayez avec l'ajout de l'espace de noms.

OriginalL'auteur ryanulit | 2013-07-18