0

可能是我的问题很简单,或者我对此并不陌生,问题是在尝试在中继器的项目数据绑定中执行以下代码时,我遇到了错误无法转换 *System.Data.Entity.DynamicProxies 类型的对象。 AutoPublishLog_06BC2AA20C3D11E56D78DD544C2C7E5211D828344650C93B9AA23BDEE16A6DCE' 输入“System.Data.DataRowView”。*

错误线是

Dim row As System.Data.DataRowView = DirectCast(e.Item.DataItem,   System.Data.DataRowView)

任何帮助,在此先感谢

代码片段

Protected Sub AutoPublishList_ItemDataBound(ByVal sender As Object, ByVal e As 
System.Web.UI.WebControls.RepeaterItemEventArgs) Handles AutoPublishList.ItemDataBound

    If e.Item.ItemType = ListItemType.AlternatingItem OrElse e.Item.ItemType = ListItemType.Item Then
        Try
             Dim row As System.Data.DataRowView = DirectCast(e.Item.DataItem, System.Data.DataRowView) 

            Dim pageID As Literal = DirectCast(e.Item.FindControl("PageID"), Literal)

             If Convert.ToInt32(row("PageID")) = Business.Objects.Constants.A Then
            pageID.Text = "Dummy A"
              End If
             If Convert.ToInt32(row("PageID")) = Business.Objects.Constants.B Then
            pageID.Text = "Dummy B"
               End If

        Catch ex As Exception
            AddErrInfo(ex)
            ErrHandler(ex)
        End Try
    End If

End Sub
4

2 回答 2

1

您正在混合经典 ADO.NET 和实体框架对象。这是两个不同的世界,不会自动互换。

EF 对象是强类型对象,我建议您将 e.Item.DataItem 转换为您的 EF 类型。从您的异常消息中,我怀疑 EF 类型名为 AutoPublishLog。

尝试将其转换为:

Dim row AS AutoPublishLog = DirectCast(e.Item.DataItem, AutoPublishLog)

'your code

If row.PageID = Business.Objects.Constants.A then
'your code

这应该可以工作(也许您需要一些命名空间或 AutoPublishLog 的其他名称,但如果不知道您的模型就很难判断)。

于 2013-04-01T12:53:08.163 回答
0

我不知道如何使用 VB.Net,但我认为您e.Item.DataItem无法转换为您想要的类型......我对此表示怀疑。尝试查看类型。

于 2013-04-01T11:42:31.393 回答