Маршрут ссылки - Url.Action - PullRequest
       2

Маршрут ссылки - Url.Action

0 голосов
/ 15 марта 2010

Я пытаюсь вернуть свои ссылки, чтобы они отображались как /Area_1419.aspx/2/1.

Мне удалось получить этот результат в примере 2, но я не понимаю, почему он работает, так как я ожидаю, что пример 1 ниже будет работать.

Я не вижу, как Пример 2 знает, как перейти к контроллеру Area_1419 ?

Маршрут

routes.MapRoute(
    "Area_1419 Section",
    "Area_1419.aspx/{section_ID}/{course_ID}",
    new { controller = "Home", action = "Index" }
);

Пример ссылок 1

<a href='<%=Url.Action("Area_1419", 
   new { section_ID="2", course_ID="1" })%>'><img .../></a>

Возвращает: /Home.aspx/Area_1419?section_ID=2&course_ID=1

Пример ссылок 2

<a href='<%=Url.Action("index", 
   new { section_ID="2", course_ID="1" })%>'><img .../></a>

Возвращает: /Area_1419.aspx/2/1

Ответы [ 2 ]

2 голосов
/ 15 марта 2010

Помните - 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" });
1 голос
/ 01 апреля 2015

Вы можете использовать Url.RouteUrl(), в вашем случае

Url.RouteUrl("Area_1419 Section", new { controller = "Home", action = "Index", section_ID="2", course_ID="1"}

, чтобы убедиться, что вы используете правильное имя маршрута и получите правильный URL-адрес, несмотря ни на что

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...