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

ASP.NET Repeater控件ItemTemplate无法显示数据库数据问题

ASP.NET Repeater控件ItemTemplate数据不显示的排查与解决

针对你遇到的Repeater控件ItemTemplate数据无法正常显示的问题,结合你提供的代码,整理以下排查方向和解决方案:

1. 确认字段名完全匹配

ASP.NET的Eval方法区分大小写,必须确保前台绑定的字段名与后台数据源的列名完全一致:

  • 检查存储过程spQueryBoardMemberGroups返回的DataTable中,是否存在BoardGroupName、CompanyName列,且列名大小写和前台<%# Eval("BoardGroupName") %>、<%# Eval("CompanyName") %>完全一致;
  • 检查存储过程spQueryBoardMembers返回的DataTable中,是否存在BoardMemberName列,且列名与前台<%# Eval("BoardMemberName") %>完全匹配。

2. 完善ItemDataBound事件的项类型判断

GroupRepeater_ItemDataBound事件会触发Header、Footer、Separator等非数据项的绑定,这些项的DataItem为null,直接强转会导致逻辑跳过。修改代码,只处理数据项和交替项:

protected void GroupRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    try
    {
        // 仅处理数据项和交替数据项
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            DataRowView groupRow = (DataRowView)e.Item.DataItem;
            Repeater memberRepeater = (Repeater)e.Item.FindControl("MemberRepeater");

            if (memberRepeater != null && groupRow != null)
            {
                string companyName = groupRow.Row["CompanyName"].ToString();
                string constr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
                DataTable src = DbHelper.SqlStoredProcedure1ParamDataTable("spQueryBoardMembers", "@CompanyName", companyName, constr);

                memberRepeater.DataSource = src;
                memberRepeater.DataBind();
            }
        }
    }
    catch (Exception ex)
    {
        HelperFunctions.Logger.Error("Website" + ex.ToString(), MethodBase.GetCurrentMethod());
        lblMessage.Text = "Error encounted and logged, contact support - Method that failed = " + MethodBase.GetCurrentMethod().Name;
    }
}

3. 规范前台Label的绑定写法

前台Label中混写静态文本和绑定表达式可能存在解析问题,建议改为规范的绑定方式:

<div class="d-block d-md-none">
    <asp:Label runat="server" Text='<%# "Name" + Eval("BoardMemberName") %>'></asp:Label>
    <br/>
</div>

或分开静态文本与绑定控件:

<div class="d-block d-md-none">
    Name <asp:Label runat="server" Text='<%# Eval("BoardMemberName") %>'></asp:Label>
    <br/>
</div>

4. 调试验证数据源内容

在GroupRepeater_ItemDataBound中添加调试代码,确认子Repeater的数据源是否正确:

// 输出DataTable的列名,确认存在BoardMemberName
foreach(DataColumn col in src.Columns) 
    Response.Write($"列名:{col.ColumnName}<br/>");
// 输出每行的BoardMemberName值
foreach(DataRow row in src.Rows) 
    Response.Write($"成员名:{row["BoardMemberName"]}<br/>");

运行页面查看输出,确认数据源确实包含预期的字段和数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:30:35