Как сделать List (Of SelectListCollection) для создания экземпляра в DropDownListFor в vb.net - PullRequest
0 голосов
/ 04 октября 2019

Я использую Html.DropDownListFor, чтобы позволить пользователю выбрать несколько значений? Тем не менее, объект коллекции SelectList, который я использую, кажется, не создан. Как убедиться, что объект SelectList создан в VB.Net?

<div class="col-xs-6 col-md-8">
      @Html.DropDownListFor(Function(model) model.CountyLookups, New SelectList(Model.MyActivitySearchCriteria.Counties, "Id", "Name"), "--Select--", New With {.Class = "form-control ", .Multiple = "multiple", .data_bind = "value:  CountyLookupId"})
</div>    

Контроллер

Function DisplayActivity(cpEventId As Guid,cpActivityId As Guid) As ActionResult
   Dim cpActivityViewModel As CpActivityViewModel = SetupCpActivityViewModel(cpEventId, cpActivityId)
   Return View("ActivityView", cpActivityViewModel)
End Function

ViewModel

Public Class CpMyActivityViewModel
Inherits BaseViewModel
Property HasApproverAccess As Boolean?
Property MyActivitySearchResults As List(Of CpMyActivitySearchResult)
Property MyActivitySearchCriteria As CpMyActivitySearchCriteria
Property SiteSearchResults As List(Of CpSiteSearchResult)
Property StatusLookups As List(Of Lookup)
<Display(Name:="County")>
Property CountyLookups As List(Of Lookup)

Вложено Class в модель представления, которая содержит List(Of SelectList)

Public Class CpMyActivitySearchCriteria
  Property SelectedCountyId As Integer
  Property Counties As List(Of SelectListItem)

  Sub New()
      Counties = New List(Of SelectListItem)()
  End Sub

End Class

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

 <div class="row voffset2">
     <div class="col-xs-4 control-label">
        @Html.LabelFor(Function(model) 
        model.MyActivitySearchCriteria.StatusLookupId)
     </div>
     <div class="col-xs-6 col-md-8">
        @Html.DropDownList("StatusLookupId", New SelectList(Model.StatusLookups, "Id", "Name"), "-- Select --", New With {.class = "form-control ", .data_bind = "value: StatusLookupId"})
        @Html.ValidationMessageFor(Function(model) model.MyActivitySearchCriteria.StatusLookupId)
     </div>
  </div>

Вывод, который я получу, должен быть полностью заполненным Dropboxlist, который принимает несколько вариантов выбора. На самом деле приведенный ниже код возвращает мне Dropbox, но выборки не передаются обратно в Controller.

 @Html.DropDownListFor(Function(model) model.CountyLookups, New SelectList(Model.CountyLookups, "Id", "Name"), "--Select--", New With {.Class = "form-control ", .Multiple = "multiple", .data_bind = "value:  CountyLookupId"})

Ошибка, которую я получаю при первой загрузке, проходящей через Controller

Сообщение об исключении:

Ссылка на объект не установлена ​​для экземпляра объекта.

1 Ответ

0 голосов
/ 04 октября 2019

Я думаю, что необходимо создать все свойства объекта класса в конструкторе.

Public Class CpMyActivityViewModel
Inherits BaseViewModel

Property HasApproverAccess As Boolean?
Property MyActivitySearchResults As List(Of CpMyActivitySearchResult)
Property MyActivitySearchCriteria As CpMyActivitySearchCriteria
Property SiteSearchResults As List(Of CpSiteSearchResult)
Property StatusLookups As List(Of Lookup)
<Display(Name:="County")>
Property CountyLookups As List(Of Lookup)

//constructor to instantiate properties of class whenever CpMyActivityViewModel is instantiated.
Sub New()
    Counties = New List(Of SelectListItem)()
    MyActivitySearchResults = New List(Of CpMyActivitySearchResult)
    MyActivitySearchCriteria = New CpMyActivitySearchCriteria
    SiteSearchResults = New List(Of CpSiteSearchResult)
    StatusLookups = New List(Of Lookup)
    CountyLookups = New List(Of Lookup)
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...