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
相关产品推荐
相关产品推荐

