2016-06-23 5 views
0

가 여기 내 모델입니다MVC VB.NET SelectListItem/DropDownListFor를 구축하는 동적

Function populateList() 

     'this is hardcoded at present, because I haven't been able to 
     'dynamically add to this IEnumerable. The implication is, I need a 
     'code change every time I add a new subject to my app ... 


     Dim model = New subjectListModel With { 
     .activities = { 
       New SelectListItem() With {.Value = activityList(0), .Text = activityList(0)}, 
       New SelectListItem() With {.Value = activityList(1), .Text = activityList(1)}, 
       New SelectListItem() With {.Value = activityList(2), .Text = activityList(2)}, 
       New SelectListItem() With {.Value = activityList(3), .Text = activityList(3)}, 
       New SelectListItem() With {.Value = activityList(4), .Text = activityList(4)}, 
       New SelectListItem() With {.Value = activityList(5), .Text = activityList(5)}, 
       New SelectListItem() With {.Value = activityList(6), .Text = activityList(6)}, 
       New SelectListItem() With {.Value = activityList(7), .Text = activityList(7)}, 
       New SelectListItem() With {.Value = activityList(8), .Text = activityList(8)}, 
       New SelectListItem() With {.Value = activityList(9), .Text = activityList(9)} 
      } 
     } 

     Return View(model) 
    End Function 

이 : 여기

@Html.DropDownListFor(Function(x) x.selectedActivity, Model.activities, New With {.onchange = "this.form.submit();"}) 

그리고 나의 컨트롤러 잘 작동하고 내 옵션의 처음 10 개를 포함하는 드롭 다운 목록을 표시합니다. 나는 내가 보여주고 싶은 것보다 더 많은 것을 가지고있다. 내 문자열 배열에서 항목을 동적으로 추가 한 다음 IEnumerable로 변환하려고 시도하여 목록을 작성하는 방법을 살펴 보았습니다. 지금 내가 원하는 것을 수행하는 것으로 보이는 C# 코드를 보면서 시간을 보냈지 만, 수많은 시도에도 불구하고 VB에서이 작업을 수행 할 수 없었습니다. 문제의 큰 부분은 내가이 물건을 정말로 이해하지 못한다는 것이다. 어떤 도움을 주시면 감사하겠습니다! 그때는 IEnumerable이 변환하려고 떨어진했다

Dim dropDown = New List(Of SelectListItem) 
For j = 0 To 100 
     dropDown.Add(New SelectListItem With {.Text = activityList(j), .Value = activityList(j)}) 
Next j 

:

내가 루프를 작성하려고 한 가지 방법입니다.

내가 루프를 작성하려고하는 또 다른 방법입니다 :

Dim model = New subjectListModel 
For j = 0 To 100 
    model.activities(New SelectListItem With {.Text = activityList(j), .Value = activityList(j)}) 
Next j 

"너무 많은 인수"(Dim dropDown = New List(Of SelectListItem)에 할당)

+1

루프를 사용하여 컬렉션을 반복하고 새'SeelctListItem'을 추가하지 않는 이유는 무엇입니까? 또는 더 나은 여전히 ​​linq'.Select (x => new SelectListItem (...})'? –

+0

감사합니다. 루프를 만들려는 시도 중 하나를 보여주기 위해 질문을 업데이트했습니다. 만약 당신이 컬렉션을 반복하는 방법을 보여줄 수만 있다면 ... – IanB

+1

죄송합니다, 당신의 요구를 명확하지 않습니다. 이미 IEnumerable ''List '을 만들었습니다 - 이미 IEnumerable_으로 변환하지 않아도됩니다. –

답변

1

첫 번째 루프이 오류를 그래서 당신은 그냥 할당 할 수 IEnumerable(Of SelectListItem) 생성 model.activities = dropDown을 사용하여 subjectListModel에 당신이 첫 번째 100 개 항목을 원하는 경우

는 다른 방법으로 당신은 LINQ 쿼리

model.activities = activityList.Select(Function(x) New SelectListItem() 
    With { .Text = x, .Value = x }) 

을 사용하고 .Take(100)를 추가 할 수 있습니다.

+0

Stephen에게 감사드립니다. 첫 번째 솔루션은 완벽하게 작동했습니다. – IanB