MVC4: динамически изменять значение маршрута из раскрывающегося списка

У меня есть раскрывающийся список, который служит элементом управления навигацией по записям — выбор значения из раскрывающегося списка должен «перейти» к этой записи. Я чувствую, что делал подобные вещи до того, как это сработало, но я не могу заставить это работать. Кажется, проблема в том, что я не могу заставить раскрывающийся список изменить значение маршрута идентификатора, с которым страница была первоначально вызвана. Допустим, моя страница вызывается с этого URL-адреса:

/PatientProfile/Services/12

12 — это значение ID-маршрута, это, по сути, начальная отображаемая запись. Это работает. Однако, когда я выбираю что-то из своего раскрывающегося списка, он будет перенаправлен на что-то вроде этого:

/PatientProfile/Services/12?ID=7

Обратите внимание, что 12 все еще присутствует в идентификаторе значения маршрута. В раскрывающемся списке был выбран идентификатор 7, но он добавлен к URL-адресу в качестве нового параметра вместо значения маршрута. Я хочу, чтобы это произошло:

/PatientProfile/Services/7

Вот как выглядит бритва для моего раскрывающегося списка:

@using (Html.BeginForm("Services", "PatientProfile", FormMethod.Get))
{ 
    @Html.Label("ID", "View Profile:")
    @Html.DropDownListFor(model => model.CurrentProfile.ID, ViewBag.ProfileID as SelectList, new { onchange = "this.form.submit();" })  
}

Я пробовал как Html.DropDownList, так и Html.DropDownListFor, но не увидел разницы в поведении.

Любая помощь очень ценится.


person Adam O'Neil    schedule 26.10.2013    source источник


Ответы (1)


Я бы использовал jquery для этого. Пожалуйста, подтвердите сгенерированный идентификатор раскрывающегося списка, чтобы он работал правильно.

$('#CurrentProfile_ID').change(function(){
    window.location('@Url.Action("Services", "PatientProfile", new { id = "----" })'.replace("----", $('#CurrentProfile_ID :selected').val()));
}); 

Надеюсь, это поможет.

PS. Это звучит как идеальная ситуация для использования частичного представления, которое вы обновляете с помощью вызова ajax, поэтому вам не нужно отправлять обратно.

person Matt Bodily    schedule 28.10.2013
comment
спасибо за ответ. Тем временем я решил, вообще не используя значение маршрута (вместо этого используя простые параметры строки запроса - как если бы я использовал классический ASP). - person Adam O'Neil; 29.10.2013