Получить текущее действие и контроллер и использовать его как переменную в Html.ActionLink?

Мне нужно иметь возможность динамически извлекать текущее действие и имя контроллера любой страницы, на которой вы находитесь, и фактически использовать их для создания нового HTML.ActionLink, который ссылается на одно и то же имя действия и контроллера, но в другом площадь. Поэтому, я думаю, мне нужно получить текущее действие и имя контроллера как переменные, которые будут использоваться при создании нового HTML.ActionLink.

Итак, если я на странице www.site.com/about, мне нужно, чтобы ссылка была динамически сгенерирована на странице www.site.com/es/about.

В основном я построил испанский перевод версии моего сайта в отдельной папке области (с теми же именованными контроллерами, действиями и представлениями, только контент на испанском языке). Мне нужно, чтобы пользователь мог переключаться между английской версией страницы (которая по умолчанию и находится в корневом представлении сайта) и испанской версией (чьи представления находятся в папке области "es" ) какая бы страница ни находилась в данный момент. Я не могу "жестко закодировать" эти ссылки, потому что мне это нужно в общем частичном представлении, которое является _topNavigation в моем _Layout, используемом на каждой странице.

Пожалуйста, дайте мне знать, если мне нужно уточнить. Я уверен, что использование "областей" на самом деле не было подходящим способом при локализации приложения, но я все еще стараюсь научить себя asp.net MVC. Я прочитал много МНОГИХ учебников и примеров по локализации, и я просто не мог заставить их работать или иметь смысл.

Я также должен добавить, что я уже знаю, как использовать HTML.ActionLink, чтобы идти туда и обратно между областями. Мне удалось создать правильный HTML.ActionLinks для любого из представлений в испанской области, а также для любого из представлений на сайте по умолчанию. Так что это не мой вопрос.

Любая помощь очень ценится! Спасибо!

Ответ 1

Используйте ViewContext.RouteData для определения текущего контроллера и действия:

@Html.ActionLink("Spanish Version", 
                 ViewContext.RouteData.Values["action"] as String,
                 ViewContext.RouteData.Values["controller"] as String,
                 new { Area = "es" })

Ответ 2

Попробуйте следующее:

 Html.ActionLink("Espanol", "action", "ControllerName", new { Area = "es" }, null)