0

ユーザーを表すモデルがあります。これらのユーザーのセットを返すためのヘルパークラスを作成しましたList(Of Users)

これが私がそれをする方法です

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

ここで、Modelには2つのプロパティがあり、それぞれ値とテキストとして使用したいIdと思います。UserName

私はこのようなことを試みましたが、これは型キャストの問題を引き起こします。だから私は明らかにそれを間違っています。

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

リストをSelectListItemsとしてDropDownListに渡す方法は?

4

1 に答える 1

1

List(Of User)LINQ を使用して、次のように投影できます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

于 2012-08-23T17:41:23.367 に答える