如何设置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
相关产品推荐
相关产品推荐

