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

如何设置WebForms Repeater中文本框属性以在保存时作为标识符

嘿,针对你这个动态Repeater里文本框要做保存标识符的需求,我给你几个实用的方案,都是ASP.NET WebForms里常用的套路:

方案1:给TextBox设置带索引的唯一ID

直接在ItemTemplate里利用Container.ItemIndex给TextBox生成唯一ID,这样后台遍历的时候能通过ID区分每一项:

<asp:TextBox ID='<%# "txtOtherItemTypeDescription_" + Container.ItemIndex %>' 
             runat="server" 
             Visible="true" />

后台保存时,遍历Repeater的Items,通过索引或者拆分ID来关联数据:

foreach (RepeaterItem item in rptClientItems.Items)
{
    if (item.ItemType != ListItemType.Item && item.ItemType != ListItemType.AlternatingItem) continue;
    
    TextBox txtDesc = (TextBox)item.FindControl($"txtOtherItemTypeDescription_{item.ItemIndex}");
    // 这里用item.ItemIndex作为临时标识,或者结合Repeater的DataKeys获取真实业务ID
    var itemKey = rptClientItems.DataKeys[item.ItemIndex]["YourItemID"];
    SaveYourData(itemKey, txtDesc.Text);
}

方案2:给TextBox添加自定义数据属性

如果你的Repeater绑定的数据源有业务唯一标识(比如ItemID),可以给TextBox加一个data-*自定义属性,把业务ID存进去,这样前后台都能方便获取:

<asp:TextBox ID="txtOtherItemTypeDescription" 
             runat="server" 
             Visible="true"
             data-item-id='<%# Eval("YourItemID") %>' />

后台保存时直接读取这个属性:

foreach (RepeaterItem item in rptClientItems.Items)
{
    if (item.ItemType != ListItemType.Item && item.ItemType != ListItemType.AlternatingItem) continue;
    
    TextBox txtDesc = (TextBox)item.FindControl("txtOtherItemTypeDescription");
    string itemId = txtDesc.Attributes["data-item-id"];
    if (!string.IsNullOrEmpty(itemId))
    {
        SaveYourData(int.Parse(itemId), txtDesc.Text);
    }
}

方案3:在ItemDataBound事件里给TextBox.Tag赋值

如果你更习惯后台绑定标识,可以在rptClientItems_ItemDataBound事件里,把业务对象的唯一标识存到TextBox的Tag属性里:

protected void rptClientItems_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        YourItemModel itemModel = (YourItemModel)e.Item.DataItem;
        TextBox txtDesc = (TextBox)e.Item.FindControl("txtOtherItemTypeDescription");
        txtDesc.Tag = itemModel.ItemID; // 把业务ID存到Tag里
        // 其他绑定逻辑...
    }
}

保存时直接取Tag值:

foreach (RepeaterItem item in rptClientItems.Items)
{
    if (item.ItemType != ListItemType.Item && item.ItemType != ListItemType.AlternatingItem) continue;
    
    TextBox txtDesc = (TextBox)item.FindControl("txtOtherItemTypeDescription");
    int itemId = (int)txtDesc.Tag;
    SaveYourData(itemId, txtDesc.Text);
}

额外提示

如果是允许用户动态新增Repeater项(不是只绑定初始数据源),那新增的时候要给每个新项生成唯一的临时标识(比如Guid或者自增数字),确保保存时能区分新增项和原有项,避免数据混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:31:16