Verwenden von Url.RouteUrl () mit Routennamen in einem Bereich

Als Randnotiz verstehe ich das Ganzemehrdeutige Controllernamen Problem und haben Namespace verwendet, um meine Routen zum Laufen zu bringen, daher denke ich nicht, dass dies hier ein Problem ist.

Bisher habe ich meine Projektlevel-Controller und dann einen User-Bereich mit folgender Registrierung:

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 }
        );
    }
}

Die "UserHome" -Route ist da, damit ich die Route zulassen kann/User/5 gegen/User/Home/Index/5 das sieht sauberer aus IMO.

Idealerweise würde ich gerne nutzenUrl.RouteUrl("UserHome", new { id = 5 }), um die Route an einer anderen Stelle zu generieren, die aber immer leer bleibt oder eine Ausnahme darstellt, die besagt, dass der Routenname nicht gefunden werden kann, der offensichtlich vorhanden ist.

Jedoch wenn ich benutzeUrl.RouteUrl("UserHome", new { controller = "Home", action = "Index", id = 5 }) es funktioniert kein problem.

Warum muss ich die Aktion und den Controller angeben, wenn sie bereits Standardwerte in der Routenzuordnung haben? Was vermisse ich?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage