You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB ItemDataBound代码向ASP Repeater传值遇空引用错误,需实现指定位置消息显示

解决Repeater ItemDataBound空引用错误及自定义消息显示问题

首先咱们来拆解你遇到的Object reference not set to an instance of an object错误,大概率是这两个原因导致的:

  • FindControl("trItemr00")没找到对应的HtmlTable控件,返回了null
  • 或者DataRowView里的netValue字段不存在/为空值

结合你要在指定td中显示自定义消息的需求,咱们一步步来修正:

第一步:修复空引用问题,添加安全判断

先给后台代码加上空值校验,避免找不到控件或字段为空的情况:

Protected Sub rptRps_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rptRps.ItemDataBound
    If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.Item Then
        ' 先校验DataItem是否有效
        Dim drv As DataRowView = TryCast(e.Item.DataItem, DataRowView)
        If drv IsNot Nothing Then
            ' 校验netValue字段是否不为空
            If drv("netValue") IsNot DBNull.Value Then
                Dim valueReceived As Integer = CType(drv("netValue"), Integer)
                If valueReceived < 0 Then
                    ' 找到td内的Label控件(后续要修改前端模板)
                    Dim litLastestLog As Label = TryCast(e.Item.FindControl("litLastestLog"), Label)
                    If litLastestLog IsNot Nothing Then
                        litLastestLog.Text = "你的自定义消息内容"
                    End If
                End If
            End If
        End If
    End If
End Sub

第二步:修改前端Repeater模板,方便后台控制内容

你原来的td里直接用<%# Eval %>输出内容,没法在后台直接修改。建议把这个td里的内容换成Label控件,这样后台能精准找到并修改它的文本:

<asp:Repeater ID="rptRps" runat="server" OnItemDataBound="rptRps_ItemDataBound" OnItemCommand="rptRps_ItemCommand">
    <HeaderTemplate>
        <table id="tbLegenda" runat="server" border="0" cellpadding="0" cellspacing="0" style="width: 100%; vertical-align: top">
            ...
            <td class="funHeader" style="width: 25%">
                <asp:Literal ID="lit2LastestLog" runat="server" Text="Descr Log"></asp:Literal>
            </td>
            ...
    </HeaderTemplate>
    <ItemTemplate>
        ...
        <td class="RepeaterItemCell_m" style="width: 4%; text-align: center">
            <%-- 替换为Label控件,保留原有默认值 --%>
            <asp:Label ID="litLastestLog" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "LastDescrLog").ToString() %>'></asp:Label>
        </td>
        ...
    </ItemTemplate>
</asp:Repeater>

额外的安全建议

  • 确保后台FindControl的ID和前端控件ID完全一致,大小写也要匹配
  • 如果netValue可能不是整数类型,建议用Integer.TryParse做更安全的转换:
    Dim valueReceived As Integer
    If Integer.TryParse(drv("netValue").ToString(), valueReceived) Then
        If valueReceived < 0 Then
            ' 执行自定义消息设置逻辑
        End If
    End If
    

内容的提问来源于stack exchange,提问作者Joelias Andrade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:24:31