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

如何在ASP.NET Repeater同一项的另一<td>中访问<td>内的Label?

解决ASP.NET Repeater中无法访问Label控件的问题

嘿,我明白你遇到的困扰了!在Repeater的ItemTemplate里直接用<% %>代码块访问Label1是行不通的——这些代码块是在页面解析阶段执行的,而Repeater里的服务器控件(比如Label1)要等到Repeater绑定数据之后才会被实例化,所以此时Label1还不存在,自然会报错。

其实不用绕弯子去访问Label,我们直接用数据源里的strRoles字段做判断就可以了,毕竟Label的Text也是从这个字段来的。

修改后的代码(前端直接处理)

<asp:Repeater runat="server" ID="Repeater1">
    <ItemTemplate>
        <tr role="row" class="odd">
            <td>
                <asp:Label ID="Label1" runat="server" Text='<%# Eval("strRoles") %>'></asp:Label>
            </td>
            <td>
                <% 
                    // 直接从数据源获取角色值,同时处理空值避免空引用报错
                    var currentRole = Eval("strRoles")?.ToString();
                    if (!string.IsNullOrEmpty(currentRole) && currentRole == "Creator") 
                    {
                %>
                    <a href="#modal-danger" data-toggle="modal" onclick='<%# Eval("intProjectId", "saveID(\"{0}\")")%>' title="Delete">
                        <i class="fa fa-trash" style="font-size: 24px; color: #9c9798;"></i>
                    </a>
                <% } %>
            </td>
        </tr>
    </ItemTemplate>
</asp:Repeater>

补充:后台事件处理方式(适合复杂逻辑)

如果你的判断逻辑比较复杂,或者需要和其他服务器控件交互,也可以用Repeater的ItemDataBound事件来处理:

  1. 先给存放删除按钮的<td>加上服务器端标识:
<td runat="server" ID="tdDeleteContainer">
</td>
  1. 后台代码添加事件处理:
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    // 只处理数据项,跳过表头、脚注等
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        // 从当前数据项中获取角色和项目ID
        string role = DataBinder.Eval(e.Item.DataItem, "strRoles").ToString();
        string projectId = DataBinder.Eval(e.Item.DataItem, "intProjectId").ToString();
        
        // 找到存放按钮的容器
        HtmlTableCell deleteContainer = (HtmlTableCell)e.Item.FindControl("tdDeleteContainer");
        
        if (role == "Creator")
        {
            // 动态生成删除按钮的HTML
            deleteContainer.InnerHtml = $@"<a href='#modal-danger' data-toggle='modal' onclick='saveID(""{projectId}"")' title='Delete'>
                                            <i class='fa fa-trash' style='font-size: 24px; color: #9c9798;'></i>
                                          </a>";
        }
        else
        {
            // 隐藏容器或者清空内容
            deleteContainer.Visible = false;
        }
    }
}

最后别忘了给Repeater加上事件绑定属性:OnItemDataBound="Repeater1_ItemDataBound"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:12:27