#asp.net-mvc-2 #c#-4.0
#asp.net-mvc-2 #c #-4.0
Вопрос:
Я новичок в работе над MVC2 asp.net проекты.
Мне было интересно, возможно ли иметь ссылку на действие, подобную этой:
<%: Html.ActionLink("[Add To Cart]", "../StoreCart/AddToCart", new { id = Model.id })%>
Обратите внимание на ../StoreCart
.
Вот пример возвращаемого URL (в данный момент я нахожусь на экране магазина, когда вижу ссылку ActionLink, но я хотел бы выйти, так сказать, «на один уровень выше»):
Ошибка (404): http://localhost:8231/StoreScreen/StoreCart/AddToCart?id=9
Желаемый: http://localhost:8231/StoreCart/AddToCart?id=9
Спасибо!
PS: Почему вы не можете просто сделать что-то подобное php и написать пользовательский <a href="<%: index "/StoreCart/AddToCart?id=" id %>" > add to cart </a>
🙂
Ответ №1:
ActionLink
Не предназначено указывать на физический URL-адрес, скорее на действие в контроллере.
<%: Html.ActionLink("[Add To Cart]", "AddToCart", "StoreCart", new { id = Model.id }, null)%>
Примечание: Окончательный вариант null
необходим, поскольку этого требует переопределение ActionLink
. Это модель, и она может быть object или null.
Комментарии:
1. спасибо, что указали на параметр «, null», я этого не заметил: P
Ответ №2:
Вы не должны передавать ../StoreCart/AddToCart
в качестве аргумента в ActionLink
. Вторым аргументом ActionLink
является имя действия, и я сильно сомневаюсь, что ваше действие вызвано ../StoreCart/AddToCart
.
Итак, что вы хотите (который использовал бы тот же контроллер, что и текущий URL-адрес запроса):
<%: Html.ActionLink("[Add To Cart]", "AddToCart", new { id = Model.id }) %>
и если вы хотите установить конкретный контроллер, просто используйте соответствующую перегрузку:
<%: Html.ActionLink(
"[Add To Cart]",
"AddToCart",
"StoreCart",
new { id = Model.id },
null
) %>
И вот список всех доступных перегрузок, с которыми я бы рекомендовал вам ознакомиться.
Комментарии:
1. Я уже пробовал это и подумал, что это неправильный способ. Потому что, когда я использую то, что вы предложили, я получаю этот URL:
http://localhost:8231/StoreScreen/AddToCart?Length=9
(StoreScreen вместо StoreCart), а также, как насчет этой вещи с длиной = 9? Это длина строки параметра, которую я передаю для значения routeValue: «StoreCart»2. @Twodordan, о, это из-за вашей конфигурации маршрутизации. ActionLink просто использует ваши маршруты.
3. Извините, моя ошибка, не увидел значение null
4. @Twodordan, да, значение null в конце указывает на
htmlAttributes
параметр. Позволяет передавать такие вещи, как@class
и т.д., В этот элемент привязки.