У меня похожая ситуация, и я решил ее немного по-другому.
Поскольку моя главная страница имела функциональность , я создал новый базовый класс контроллеров (который наследуется от Controller), и все мои настоящие контроллеры наследуют от моего пользовательского класса.
Затем я реализую OnActionExecuting в базовом классе, чтобы выполнить обычную работу.
Затем на вашей главной странице, если у вас есть подобная форма, она отправит на текущий URL-адрес запрос GET и добавит язык в качестве параметра строки запроса:
<form id="language" method="get" >
<select name="language">
<option value="en">English</option>
<option value="es">Spanish</option>
...
</select>
</form>
Используйте jQuery, чтобы подключить его к автоматической отправке и т. Д.
Вы можете найти языковой параметр в строке запроса в вашем базовом классе контроллера и установить флаг, который сообщает методу реального контроллера, какой язык использовать. В этой модели вы напрямую переходите к реальному контроллеру, чтобы восстановить страницу и избежать перенаправления.
Обратите внимание, это работает универсально, только если вы еще не используете параметры строки запроса.
Если это не работает для вас, вы также можете использовать свой текущий метод, но включить URL-адрес для перенаправления в скрытое поле, например:
<%= Html.Hidden("redirect", Request.Url %>