如何避免在具有 VB.NET 的中继器中使用 EVAL

本文关键字:中继器 EVAL NET 何避免 VB | 更新日期: 2023-09-27 18:37:08

我想停止在我的代码中的任何地方使用 EVAL,并将其从所有中继器中删除。 我正在处理的项目是 .NET 3.5 中的。

我有这个课

Public Class person
    Public Name As String
    Public Age As String
End Class

我正在使用共享函数创建List(of person)

我有一个中继器,我将List(of person)绑定到它。

我在中继器的项模板部分中有以下代码:

<ItemTemplate>
    <tr>
        <td><%# DirectCast(Container.DataItem, person).Name %></td>
        <td><%# DirectCast(Container.DataItem, person).Age %></td>
    </tr>
</ItemTemplate>

当我尝试运行我的代码时,它给了我以下错误消息:

System.InvalidCastException was unhandled by user code
  Message=Unable to cast object of type 'person' to type 'person'.
  Source=App_Web_2uam_1hy
  StackTrace:
       at ASP.test_aspx.__DataBind__control4(Object sender, EventArgs e) in c:'users'test'documents'visual studio 2013'Projects'test.aspx:line 152
       at System.Web.UI.Control.OnDataBinding(EventArgs e)
       at System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding)
       at System.Web.UI.Control.DataBind()
       at System.Web.UI.Control.DataBindChildren()
  InnerException: 

为什么我不能把它投射到自己身上? 我在这里有点困惑,因为我可以在网上找到的所有示例都是针对 c# 的。 我确信我错过了简单的东西,但我一辈子都想不通。

谢谢。

如何避免在具有 VB.NET 的中继器中使用 EVAL

在中继器上,设置项目类型。这允许您具有强类型数据绑定。

<asp:Repeater runat="server" ItemType="person">

您可能需要完全限定类名。

这允许您做

<ItemTemplate>
<tr>
    <td><%# Item.Name %></td>
    <td><%# Item.Age %></td>
</tr>
</ItemTemplate>