如何在JavaScript变量中获取Repeater控件内部的Label值
错误原因
rlbl_Remarks是Repeater控件项模板内的子控件,每个Repeater行都会生成一个独立的rlbl_Remarks实例,页面顶层对象并没有直接声明这个控件,所以你写的<%=rlbl_Remarks.ClientID%>无法解析出有效ID,自然获取不到元素。
解决方法(按常用场景选择)
1. 批量获取所有Remarks值存入JS数组
第一步:给Label添加固定CSS类,方便JS选择:
<asp:Repeater ID="rep_tskAttachments" runat="server" OnItemDataBound="rep_tskAttachments_ItemDataBound"> <asp:Label ID="rlbl_Remarks" runat="server" CssClass="remarks-label" Text='<%# Eval("REMARKS") %>'></asp:Label> </asp:Repeater>
第二步:JS通过类选择器取值:
// 获取所有备注元素节点 const remarkEls = document.querySelectorAll('.remarks-label'); // 转换为值数组 const valComments = Array.from(remarkEls).map(el => el.innerText.trim()); // 要取单条备注直接用索引即可,比如取第一条:const firstComment = valComments[0]
2. 点击行内操作按钮时取当前行对应Remarks值
如果是每行有独立操作按钮,点击时取当前行的备注,可直接通过DOM关联查找:
第一步:修改Repeater模板,添加操作按钮:
<asp:Repeater ID="rep_tskAttachments" runat="server" OnItemDataBound="rep_tskAttachments_ItemDataBound"> <ItemTemplate> <asp:Label ID="rlbl_Remarks" runat="server" CssClass="remarks-label" Text='<%# Eval("REMARKS") %>'></asp:Label> <button type="button" class="get-remark-btn">查看当前备注</button> </ItemTemplate> </asp:Repeater>
第二步:JS绑定点击事件取值:
document.querySelectorAll('.get-remark-btn').forEach(btn => { btn.addEventListener('click', function() { // 查找当前按钮同级的备注元素 const currentRemark = this.parentElement.querySelector('.remarks-label').innerText.trim(); // 后续业务逻辑 console.log(currentRemark); }); });
3. 后台直接序列化所有备注到前端变量
如果不需要操作DOM,可直接在后台把所有备注值序列化为JS数组:
首先在后台.cs文件添加公开属性:
public List<string> AllRemarks = new List<string>(); protected void rep_tskAttachments_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { var rlbl_Remarks = (Label)e.Item.FindControl("rlbl_Remarks"); AllRemarks.Add(rlbl_Remarks.Text.Trim()); } }
前端直接输出JS变量:
const valComments = <%= new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(AllRemarks) %>;
内容的提问来源于stack exchange,提问作者Bilal Aslam
相关产品推荐
相关产品推荐

