ASP.NET MVC Html.ActionLink результат URL - способ кодирования - PullRequest
6 голосов
/ 28 января 2009

Я создаю количество действий в контроллерах MVC.

public ActionResult DoSmth1(string token)
public ActionResult DoAnother2(string token)

А когда мне нужно вызвать ActionLink ..

=Html.ActionLink<SomeController>( x=> x.DoSmth(item.property), item.property)
=Html.ActionLink<AnotherController>( x=> x.DoAnother(item.property), item.property)

... он генерирует мне разные URL:

/Some/DoSmth/stringvalue
/Another/DoAnother?property=stringvalue

Где установить способ построения URL? Я понятия не имею ... ((


ОК, есть какой-то путевой свет: - если имена свойств те же, что используются в схеме маршрутизации - например, controller, action и id - MVC будет всегда использовать построитель маршрута (/c/a/id).

Это немного помогает (так - назовите параметр "id" как можно * ))

Но общая проблема остается в силе ...


должен быть назван так же, как токен в маршруте

Точно - сначала у меня появилась эта идея.

Но - теперь у меня есть только маршрут по умолчанию ({controller} / {action} / {id}), но все еще есть URL с "свойством" в слешах ... Это довольно странно.

  • есть также более хитрый способ - создать точный маршрут, который сопоставит данный контроллер с именами его параметров - кажется, что это будет окончательный ответ - но я все еще не хочу этого делать ((

1 Ответ

4 голосов
/ 28 января 2009

Вы не показываете свои маршруты, но вы почти наверняка выбираете разные маршруты в этом примере. Аргумент к вашему действию должен быть назван так же, как токен в маршруте, чтобы сгенерированный URL соответствовал токену маршрута с лямбда-формой ActionLink. Все, что не соответствует токену маршрутизации, будет добавлено в качестве параметра строки запроса, как со вторым URL. Просмотр параметра строки запроса является убедительным доказательством того, что имя, которое вы передали неявно (в данном случае «свойство»), не соответствует токену маршрута. Поскольку вы получаете разные результаты с одним и тем же именем токена, я тем самым заключаю, что вы выбираете разные маршруты. Кстати, я рекомендую создавать ссылки с RouteLink вместо ActionLink, чтобы вы могли быть уверены, какой маршрут вам подходит.

...