Поместите текущие значения маршрута / URL в форму сообщения - PullRequest
0 голосов
/ 16 марта 2009

На главной странице у меня есть раскрывающееся меню. Когда пользователь выбирает язык из выпадающего списка, отправка отправляет текущий выбранный язык методу «Перевести» в моем контроллере. После чего он должен перенаправить на URL, который был до отправки перевода, чтобы он мог показать ту же самую страницу, но теперь на вновь выбранном языке.

Как мне лучше поступить? Должен ли я отправить текущий URL как-то в скрытом поле? Или я могу отправить текущий routevaluedictionary, чтобы мой метод translate мог перенаправить напрямую?

Или, может быть, есть более лучший способ?

- EDIT -
Поскольку я хочу, чтобы мои закладки также включали язык сайта, все мои действия также имеют параметр siteLanguage. Если бы я мог как-то эффективно показать пользователю набор обычных (GET) ссылок, где параметр siteLanguage заполнен соответствующим значением, это было бы еще лучше. Но, насколько я знаю, нет возможности поместить ссылки в выпадающий список, кроме как с помощью java.

Ответы [ 3 ]

1 голос
/ 16 марта 2009

У меня похожая ситуация, и я решил ее немного по-другому.

Поскольку моя главная страница имела функциональность , я создал новый базовый класс контроллеров (который наследуется от 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 %>
0 голосов
/ 16 марта 2009

Я бы поместил возвращаемый URL в строку запроса, так же, как аутентификация форм делает, когда она перенаправляет на страницу входа.

Включите returnUrl в routeValues ​​при выполнении запроса на перевод.

0 голосов
/ 16 марта 2009
public ActionResult Translate(string _lang){
      switch(_lang){
             case "English":
                   return View("English");
             case: "French":
                   return View("French");
             default:
                   return View("English");
}

Я бы лично сделал это так

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