Помните - URL отсоединены от ваших контроллеров и их действий.
Это означает, что даже странный URL, такой как "trolololo / nomnomnom / 1/2/3", может и не может вызывать Home/Index
или любую другую комбинацию контроллера / действия.
В вашем случае - пример 2 фактически не знает, как перейти к контроллеру Area_1419.
Url.Action вычисляет URL из этих деталей маршрута:
"Area_1419.aspx / {SECTION_ID} / {course_ID}"
Но ссылка все равно будет вызывать действие Индекс домашнего контроллера из-за значений маршрута по умолчанию:
new {controller = "Home", action = "Index"}
Предполагая, что у вас есть контроллер Area_1419 с действием Index, ваш маршрут должен выглядеть следующим образом:
routes.MapRoute(
"Area_1419 Section",
"Area_1419.aspx/{section_ID}/{course_ID}",
new { controller = "Area_1419", action = "Index" } //changes here
);
Это , что вы звоните.
UrlHelper.Action Method (String, Object)
Создает полный URL-адрес метода действия с использованием указанного имени действия и значений маршрута.
Этот метод перегрузки не пытается определить соответствующий контроллер. Предполагается, что вы это знаете (извлекает его из текущих значений маршрута) и воспринимает первый строковый аргумент как имя действия.
Попробуйте использовать этот .
UrlHelper.Action Method (String, String, Object)
Создает полный URL-адрес метода действия, используя указанное имя действия, имя контроллера и значения маршрута.
В вашем случае:
Url.Action("Index","Area_1419", new { section_ID="2", course_ID="1" });