如何避免在VB.NET的Repeater中使用EVAL?

时间:2016-03-02 19:49:44

标签: c# asp.net .net vb.net eval

我想停止在我的代码中到处使用EVAL并将其从所有中继器中删除。我正在研究的项目是在.NET 3.5中。

我有这个班级

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

我正在使用共享功能创建List(of person)

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

我在转发器的ItemTemplate部分中有这段代码:

<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#的。我确信这是一件我想念的简单事,但我无法理解我的生活。

感谢。

1 个答案:

答案 0 :(得分:0)

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

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

您可能需要完全限定班级名称。

这允许你做

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