【问题标题】:Unable to cast object of type 'ItemStore.Item' to type 'System.Collections.IEnumerable'无法将“ItemStore.Item”类型的对象转换为“System.Collections.IEnumerable”类型
【发布时间】:2013-04-10 08:02:18
【问题描述】:

在视图中显示项目列表时出现问题。无法将其从 ItemStore.Item 转换为 IEnumerable,我还在 list.vbhtml 中添加了“@Method List(Of ItemStore.Item)”,并且无法显示传入字典的项目,因为它的类型为“ Item Store.Item',但此字典需要类型为“System.Collections.Generic.List`1[Item Store.Item]”的模型项。

****CatalogueController**** ******

    Function About() As ActionResult
        Return View()
    End Function

    Function Index() As String
        Return "Index"
    End Function

    Function List(search As String) As ActionResult
        Dim model As New SQLItemModel
        Dim items = model.SelectById(search)
        Return View(items)

    End Function

******List.vbhtml ***********

    The search text is @ViewBag.Message

    @For Each item In Model
        @item.ID

*********SQLItemModel.vb ***********

Private connectionString As String = My.Settings.sqlconnection

Public Function SelectAll() As ICollection(Of Item)
    Dim items As New List(Of Item)
    Using connection As New SqlConnection(connectionString)
        connection.Open()
        Dim cmd As New SqlCommand("select * from item", connection)
        Dim reader As SqlDataReader = cmd.ExecuteReader()
        While reader.Read()
            items.Add(GetItem(reader))
        End While
    End Using
    Return items
End Function

Public Function SelectById(ItemID As Integer) As Item
    Dim item As Item = Nothing
    Using connection As New SqlConnection(connectionString)
        connection.Open()
        Dim cmd As New SqlCommand()
        cmd.CommandText = "select * from Tbl_Items where ID = @ID"
        cmd.Connection = connection
        cmd.Parameters.Add(New SqlParameter("ID", ItemID))
        Dim reader As IDataReader = cmd.ExecuteReader()
        If reader.Read() Then
            Item = GetItem(reader)
        End If
    End Using
    Return Item
End Function

Private Function GetItem(reader As SqlDataReader) As Item

    Dim ID = reader("ID")
    Dim ProductCode = reader("ProductCode")
    Dim Brand = reader("Brand")
    Dim Description = reader("Description")
    Dim Colour = reader("Colour")
    Dim Finish = reader("Finish")
    Dim Type = reader("Type")
    Dim Size = reader("Size")
    Dim Unit = reader("Unit")

    Return New Item(ID, ProductCode, Brand, Description, Colour, Finish, Type, Size, Unit)
End Function

【问题讨论】:

  • 那么,Item 是否实现了IEnumerable

标签: asp.net-mvc vb.net


【解决方案1】:

SelectById 只返回一个Item(而SelectAll 返回Items 的集合),但您的列表视图需要一个集合。

一个简单的解决方法是将单个项目包装在一个数组中:

Function List(search As String) As ActionResult
    Dim model As New SQLItemModel
    Dim items = model.SelectById(search)
    Return View({items})
End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 2022-01-22
    相关资源
    最近更新 更多