/ / Използване на Url.RouteUrl () с имената на маршрути в дадена зона - asp.net-mvc-4, asp.net-mvc-routing

Използване на Url.RouteUrl () с имена на маршрути в областта - asp.net-mvc-4, asp.net-mvc-маршрутизиране, url-маршрутизиране

Като странична бележка, аз разбирам цялото двусмислени имена на контролери проблем и са използвали namespacing, за да получа моите маршрути, така че не мисля, че това е проблем тук.

Досега имам контролери на ниво проекти и след това потребителска зона със следната регистрация:

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

Маршрутът "UserHome" е там, за да мога да разреша маршрута /User/5 срещу. /User/Home/Index/5 който изглежда по-чист IMO.

В идеалния случай бих искал да използвам Url.RouteUrl("UserHome", new { id = 5 }), за да генерира маршрута на друго място, но това винаги или се връща празно или ми дава изключение, казвайки, че не може да намери името на маршрута, което очевидно е там.

Въпреки това, когато използвам Url.RouteUrl("UserHome", new { controller = "Home", action = "Index", id = 5 }) няма проблем.

Защо трябва да посочвам действието и контролера, когато те вече имат подразбиращи се стойности в картографирането на маршрута? Какво липсва?

Отговори:

6 за отговор № 1

Не съм сигурен дали е имало горещо решение, но поведението сега е малко по-различно. Използване на точния код и опит:

Url.RouteUrl("UserHome", new { id = 5 })

Сега получавам:

/User/5?httproute=True

Това все още изглежда неудобно, затова експериментирах с маршрута и добавих друг параметър по подразбиране:

 context.MapRoute(
"UserHome",
"User/{id}",
new { action = "Index", controller = "Home", area = "User", id = 0,
httproute = true },
new { controller = @"Home", id = @"d+" }
);

Сега, когато използвам

Url.RouteUrl("UserHome", new { id = 5 })

Получавам хубав URL адрес на

/User/5

опровержение Може да има нежелани странични ефекти httproute=true в декларацията за маршрут.

Също така, по-подробната употреба:

@Url.RouteUrl("UserHome", new { controller = "Home", action = "Index", id = 5 })

все още работи.


2 за отговор № 2

Опитайте тази:

@Url.Action("Index", "Home", new { Area = "User" })

2 за отговор № 3

Мога да потвърдя, че с .NET 4.5.1 и MVC 5.2.2 минимум, че това поведение е фиксирано и сега работи както е с този същия точен код Url.RouteUrl("UserHome", new { id = 5 }).

Изглежда, че това е бъг, който е бил фиксиран от времето на моя пост.

Добавянето на това като отговор, тъй като въпреки че решението на TSMIT ще работи, вече няма нужда да правите тази допълнителна работа сега, когато има поправка.