【问题标题】:How do I avoid using EVAL in a Repeater with VB.NET?如何避免在带有 VB.NET 的中继器中使用 EVAL?
【发布时间】:2016-03-02 19:49:43
【问题描述】:

我想停止在我的代码中到处使用 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# 的。我敢肯定,我错过了一些简单的事情,但我终其一生都无法弄清楚。

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    这可以让你做

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

    【讨论】:

    • 当。我没有这个选项。我在.net 3.5上。我要更新这个问题。不过还是谢谢。
    • @NinjaBomb 在这种情况下,我将从 .NET 3.5 升级为我的最高优先级。
    • 上榜了!谢谢。
    • @NinjaBomb This guy 可能已经让它以与旧版本兼容的方式工作。如果是这样,我建议您在此处复制相关位作为答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    相关资源
    最近更新 更多