mvc Html.BeginForm другая схема URL

Я создаю форму для DropDown следующим образом:

@{ Html.BeginForm("View", "Stations", FormMethod.Get); } @Html.DropDownList("id", new SelectList(ViewBag.Stations, "Id", "Name"), new { onchange = "this.form.submit();" }) @{ Html.EndForm(); } 

Если я выберу значение из моего раскрывающегося списка, я перенаправляюсь к правильному controllerу, но URL-адрес не так, как хотелось бы:

/ Вокзалы / View? ID = f2cecc62-7c8c-498d-b6b6-60d48a862c1c

Я хочу:

/ Вокзалы / View / f2cecc62-7c8c-498d-b6b6-60d48a862c1c

Итак, как я могу заменить параметр id = querystring на более простую схему URL, которую я хочу?

Форма с FormMethod.Get всегда будет возвращать значения своих элементов управления формой в качестве значений строки запроса. Браузер не может создать URL-адрес на основе настроек вашего маршрута, потому что это код на стороне сервера.

Если вы действительно хотели сгенерировать /Stations/View/f2cecc62-7c8c-498d-b6b6-60d48a862c1c , тогда вы можете использовать javascript / jquery для создания собственного URL /Stations/View/f2cecc62-7c8c-498d-b6b6-60d48a862c1c и перенаправления

 @using (Html.BeginForm("View", "Stations", FormMethod.Get)) { @Html.DropDownList("id", new SelectList(ViewBag.Stations, "Id", "Name")) } var baseUrl = '@Url.Action("View", "Stations")'; $('#id').change(function() { location.href = baseUrl + '/' $(this).val(); }); 

Сторона примечания: Отправка на .change() не ожидается поведения и запутывает пользователя. Рекомендуем вам добавить кнопку, чтобы пользователь мог сделать свой выбор, проверить его и затем отправить форму (обрабатывать событие .click() кнопки, а не в .click() в раскрывающемся .change()

Удалить « id » из

 @Html.DropDownList("id", new SelectList(ViewBag.Stations, "Id", "Name"), new { onchange = "this.form.submit();" }) 
  • Избегайте модального увольнения с клавиатуры
  • Как вставить форму django в модальное окно twitter-bootstrap?
  • Давайте будем гением компьютера.