У меня есть веб-приложение на основе ASP.NET MVC4, в котором я использую макет, который содержит три языковых флага (изображения). Эти флаги видны на всем сайте. Теперь я хочу использовать эти изображения для выбора языка. Чтобы показать любую из страниц на определенном языке, мне просто нужно добавить параметр к текущему URL-адресу и загрузить его, затем мои контроллеры оценивают его и устанавливают правильный язык в модели (или устанавливают исходный резервный язык, когда есть в запросе не указан язык).Как добавить параметр к текущему URL-адресу в представлении?
Вот пример (hxxp = HTTP):
Ни один язык не указано:
hxxp://mysite.com?StationId=12
Язык указано:
hxxp://mysite.com?StationId=12&lang=1033
Мой вопрос: как я могу сформировать ссылку на мой макет, который окружает изображение флага языка и всегда указывает на текущий загруженный URL со всеми параметрами PLUS новый параметр &lang=1033
соответственно ?lang=1033
в случае, если есть только параметр языка?
Другими словами: как создать ссылку на ту же страницу со всеми параметрами и просто добавить значение маршрута в URL?
Update: Вот подробный пример
В моем _Layout.cshtml
у меня есть:
@{
var u_eng = new RouteValueDictionary(Url.RequestContext.RouteData.Values);
var u_deu = new RouteValueDictionary(Url.RequestContext.RouteData.Values);
var u_por = new RouteValueDictionary(Url.RequestContext.RouteData.Values);
u_eng.Add("lang", "1033");
u_deu.Add("lang", "1031");
u_por.Add("lang", "1046");
}
.
.
.
<li>
<a href="@Url.RouteUrl(u_por)" class="Flag BR">BR</a>
</li>
<li>
<a href="@Url.RouteUrl(u_eng)" class="Flag US">US</a>
</li>
<li>
<a href="@Url.RouteUrl(u_deu)" class="Flag DE">DE</a>
</li>
Теперь, когда я запускаю сайт, ссылки на начальную страницу работы просто отлично, они указывают на ток страницы и добавьте параметр lang = xy в соответствующий URL-адрес.
Но когда я иду на другую страницу, которая использует тот же файл макета, а также использует параметр, ссылки не получают построить правильно: пусть я иду в субстранице, который определяется этим URL:
http://localhost:1234/Stations?position=up
Сама страница отображается правильно. Но когда я зависать или следовать языковые ссылки, они указывают на:
http://localhost:1234/Stations?lang=1031
вместо
http://localhost:1234/Stations?position=up&lang=1031
Как вы можете видеть, все существующие параметры опущены.
Это именно то, что я искал. Благодаря! – Robert
К сожалению, это не сработало, как ожидалось: я построил код сверху в свой файл макета, где я использую @Url.RouteUrl (currentRouteValues) как href в теге «a», но кажется, что он только получает сборку один раз, а затем не «распознает» любые существующие значения маршрута на любых подстраницах, устанавливается только параметр «lang». – Robert
@Robert, не могли бы вы выставить код? Я не уверен, что понимаю проблему. – Andrei