Доброе утро, я попытаюсь объяснить это как можно чище.Маршрут к этому действию с другим параметром MVC/JavaScript
Страница возвращает информацию для определенной учетной записи, но некоторые люди могут находиться в нескольких учетных записях, и я хочу предоставить функциональность для переключения между ними.
В настоящее время у меня есть настройки маршрута, как:
{controller}/{action}/{accountcode}
{accountcode}
может быть пустым, и это проверяется в действии и установить на свой код по умолчанию.
До сих пор я получил это работает отлично, так что вы можете посетить следующие ссылки:
{controller}/{action} OR {controller}/{action}/{accountcode}
Так что я создал выпадающий список, который дает вам список у вас есть доступ, и при выборе он отправляет вам URL-адрес этой конкретной учетной записи.
Это отлично работает, когда я перехожу на {controller}/{action}
и выбираю, так как он принимает window.location.href
и добавляет значение выпадающего списка.
Однако, если вы находитесь на {controller}/{action}/{accountcode}
, где выпадающий список перенаправляется, и вы выбираете учетную запись, она просто пытается добавить другой код учетной записи из-за моей потрепанной логики JavaScript.
Я предполагаю, что я ищу способ получить URL-адрес текущего действия без каких-либо параметров, чтобы я мог сам определить их. Вот где я борюсь, поскольку я не могу использовать методы Url Helper или Route Helper, поскольку эта функциональность находится на странице макета, что фактически означает, что мне нужно получить действие текущей страницы.
Вот мой код, надеясь, что обеспечивает ясность:
@if ((ViewBag.Accounts ?? new List<string>{"none"}).Count > 1)
{
@Html.DropDownList("accounts", new SelectList(ViewBag.Accounts, ViewBag.AccountCode))
}
$(function() {
$("#accounts").change(function() {
window.location.href = window.location.href + "/" + $(this).val();
});
});
Ура!
блестящий пример, спасибо. Я боролся с этим, так как я не знал, что вы можете передать null агентам Razor Url, чтобы получить одно и то же действие, поэтому я пытался манипулировать 'Request.Url.Segments' в JavaScript, чтобы дать мне то, что я хотел. В целом 200% более чистый подход. – Malkin
+1 для предложения 'data- *'. Не нужно беспокоиться о том, спрятана ли строка справа. – millimoose