2016-03-02 86 views
0

我想停止在我的代码中使用EVAL,并将其从所有中继器中删除。我正在从事的项目是.NET 3.5。如何避免在VB.NET中使用EVAL?

我有这个类

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#的。我确信这是一件简单的事情,但我无法想象出我的一生。

谢谢。

回答

0

在您的中继器上,设置ItemType。这使您可以进行强类型的数据绑定。

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

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

这允许你做

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

荡。我没有这个选项。我在.net 3.5上。我要更新这个问题。不过谢谢。 – NinjaBomb

+0

@NinjaBomb在这种情况下,我会从.NET 3.5升级到最高优先级。 – mason

+0

它在名单上!谢谢。 – NinjaBomb