2012-08-23 2 views
0

사용자를 나타내는 모델이 있습니다. List(Of Users) 같이 이러한 사용자 집합을 반환하는 도우미 클래스를 만들었습니다. 여기List (Of <Model>)를 SelectListItems로 전달하는 방법 DropDownList HTML Helper?

내가

Function getDoctorsList() As List(Of Users) 
    Dim userCollection As New List(Of Users) 
    Dim sql = "SELECT * FROM " + _tblName + " WHERE usertype = 'doctor'" 
    Dim dr As SqlDataReader = dbHelper.ExecuteAndGetReader(sql) 
    While dr.Read 
     Dim user As New Users 
     user.Id = IIf(IsDBNull(dr("id")), 0, dr("id")) 
     user.UserName = IIf(IsDBNull(dr("username")), "", dr("username")) 
     user.UserNin = IIf(IsDBNull(dr("user_nin")), 0, dr("user_nin")) 
     user.UserType = IIf(IsDBNull(dr("usertype")), "", dr("usertype")) 
     user.Password = IIf(IsDBNull(dr("password")), "", dr("password")) 
     userCollection.Add(user) 
    End While 
    Return userCollection 
End Function 

내가 그들을 잡아 그렇게,이 같은 컨트롤러에 볼 수있게 보낼 방법은 다음과 같습니다 이제

ViewData("LoginUserModel") = New LoginUser 
ViewData("doctorList") = usersHelper.getDoctorsList 

, 모델 두 가지 속성 IdUserName I있다 가치와 텍스트로 각각 사용하고 싶습니다.

나는 이런 식으로 시도했지만 형식 캐스팅 문제가 발생합니다. 그래서 나는 분명히 잘못하고있다.

<%= Html.DropDownList("doctors", ViewData("doctorList")) %> 

목록을 DropDownList에 SelectListItem으로 전달하는 방법은 무엇입니까?

답변

1

당신은 프로젝트에 LINQ를 사용할 수 있습니다 귀하의 List(Of User)IEnumerable(Of SelectListItem)로 :

ViewData("doctorList") = New SelectList(usersHelper.getDoctorsList(), "Id", "UserName") 

하고 내부보기 :

<%= Html.DropDownList(
    "doctors", 
    CType(ViewData("doctorList"), IEnumerable(Of SelectListItem)) 
) %> 

ViewData("doctorList") = usersHelper 
    .getDoctorsList() 
    .Select(Function(x) New SelectListItem With { .Value = x.Id.ToString(), .Text = x.UserName }) 

또는 당신은 또한 SelectList 생성자를 사용할 수 있습니다

하지만 뷰 모델을 사용하는 것이 좋습니다. ViewData 대신.

관련 문제