2012-08-23 19 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我希望分別用作值和文本。

我試過這樣的事情,但是這給了類型轉換的問題。所以我顯然做錯了。

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

如何將List作爲SelectListItems傳遞給DropDownList?

回答

1

你可以使用LINQ來投放List(Of User)IEnumerable(Of SelectListItem)

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

或者你也可以使用SelectList構造:

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

和您的視圖中:

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

但我寧願推薦你使用視圖模型而不是ViewData

相關問題