2017-01-11 2 views
0

У меня возникла проблема с использованием SelectList с Html.DropDownList, который я не смог решить, посмотрев ответы на предыдущие вопросы.Как правильно использовать Html.DropDownList с помощью SelectList?

У меня есть следующий код в представлении:

Dim myItems As New Collection 
Dim thisItem As SelectListItem 

For Each responsibility In Model.Responsibilities.EBS_Resonsibility 

    thisItem = New SelectListItem 
    thisItem.Text = responsibility.RESPONSIBILITY_NAME 
    thisItem.Value = responsibility.RESPONSIBILITY_ID 
    myItems.Add(thisItem) 
Next 

который принимает каждый элемент из моей модели, превращает его в SelectListItem, и добавляет его в коллекцию. не

Тогда я поворачиваюсь, что в SelectList:

Dim myRoles As New SelectList(myRoleItems, "Value", "Text") 

И создать свой Html.DropDownList:

@Html.DropDownList("RoleList", myRoles, "Select Role") 

И, наконец, справиться с этим:

<a href="@Url.Action("RoleHandler", "Account", New With {.RESPONSIBILITY_ID = myRoles.SelectedValue})">Search Buildings</a> 

Проблема заключается в том, ничего проходит. Я знаю, что моя последняя строка и мой SelectList правильно, потому что если добавить параметр в конец SelectList для SelectedValue, он будет проходить этот параметр, например, так:

Dim myRoles As New SelectList(myRoleItems, "Value", "Text", 905) 

В этом случае, 905 проходит. Итак, я уверен, что я делаю что-то неправильно с доступом к значениям из моего SelectList в DropDownList. Имена элементов отображаются правильно в DDL, хотя, поэтому я не уверен, где я ошибаюсь.

Любая помощь будет принята с благодарностью, спасибо!

+0

Side Примечание: '' myRoleItems' является IEnumerable '(что требуется по DropDownList()' метода '' Использование нового SelectList (myRoleItems ". Value "," Text ")', чтобы создать другой идентичный 'IEnumerable 'из первого, бессмысленно. –

ответ

0

Код, который у вас есть для тега привязки, имеет код C#, который выполняется на сервере. Поскольку пользователь может изменить выбранную опцию выпадающего списка на что-то еще на стороне клиента, вы должны обработать это с помощью javascript на стороне клиента.

Таким образом, установите значение href вашей ссылки на базовый url метода действия (без значений маршрута) и дайте ему идентификатор, который мы будем использовать для подключения некоторых действий на стороне клиента.

@:<a id="myLink" href="@Url.Action("RoleHandler","Account")">Search Building</a> 

Теперь есть яваскрипт кода для прослушивания события щелчка по этой ссылке, получить выбранную опцию из выпадающего списка и использовать его, чтобы построить новый URL.

@section scripts 
    <script> 
    $(function() { 

     $("#myLink").click(function (e) { 
      e.preventDefault(); 
      var url = $(this).attr("href"); 
      url = url + "?RESPONSIBILITY_ID ="+$("#RoleList").val(); 
      window.location.href = url; 
     }); 

    }); 
</script> 
End Section 

Кроме того, вы действительно не нужно, чтобы создать новый объект SelectList, вы можете передать список SelectListItem к вашему методу DropDownList хелперов.

Dim list = New List(Of SelectListItem)() From { 
    New SelectListItem() With { 
         .Value = "a", 
         .Text = "a" 
    }, 
    New SelectListItem() With { 
         .Value = "b", 
         .Text = "b" 
    } 
} 

и

@Html.DropDownList("RoleList", list, "Select Role") 
Смежные вопросы