提问人:pmcs 提问时间:7/2/2020 更新时间:7/2/2020 访问量:47
无法从中继器内的控件获取复选框 ID 或已检查状态
Unable to get Checkbox ID or Checked status from Control inside a Repeater
问:
我正在将经典 ASP 程序转换为 C#/asp.net,由于客户要求,我没有太多的自由来更改显示的代码。
为了复制遗留代码的外观,我使用了 Repeater,如下所示:
<asp:Repeater ID="ParentRepeater" runat="server">
<HeaderTemplate><%= strHTML %></HeaderTemplate>
<ItemTemplate>
<tr>
<td class="fileRow colHeader">
<div class="chkbx">
<input type="checkbox" id="chkbox" name='<%#Eval("strCheckBox")%>' value='<%#Eval("strCheckBox")%>' />
</div>
<div class="icn" style="background-image: url('<%#val("strGraphic")%>');"> </div>
<div class="flnm"><a href='<%# Eval("strLinkTo") %>'
title='<%# Eval("strLinkTo") %>'><%# Eval("strFileName") %> </a>
<%# Eval("strAdditionalActions") %></div>
<div class="sz"><%# Eval("strSize") %></div>
<div class="typ"><%# Eval("FriendlyType") %></div>
<div class="mddt"><%# Eval("Modified") %> <%# Eval("strTimeZone") %></div>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</FooterTemplate>
</asp:Repeater>
我本来希望对控件 ID 使用一个变量,但 ID 不能在运行时填充。我使用了一个名为“chkbx”的静态 ID。这将呈现为 ParentRepeater$ct101$chkbox,转发器中每增加一个 CheckBox,101 就会递增。
我需要提取 CheckBox 名称(这是要使用的文件名)以及它是否被选中(意味着它被选中删除)。我使用了以下内容,但无法检索控制信息。2 FindControl 语句返回为 null。
遍历 Repeater 项,我确实在结果视图中看到了一些内容,但它全是 repeater 信息,没有控制信息。
Control cb = FindControl("ParentRepeater$ct101$chkbox") as Control; // ParentRepeater$ct101$chkbox
if (cb != null)
{
}
CheckBox cbx = FindControl("ParentRepeater$ct101$chkbox") as CheckBox; // ParentRepeater$ct101$chkbox
if (cbx != null)
{
}
foreach (RepeaterItem item in ParentRepeater.Items)
{
if(item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
{
Control btn = item.FindControl("ParentRepeater$ct101$chkbox") as Control;
}
}
任何帮助将不胜感激。
埃里克
答:
0赞
pmcs
7/2/2020
#1
第一个问题是我没有使用 asp.net 版本的 CheckBox。Runat=“Server” 可以更好地跟踪控件。
<asp:Repeater ID="ParentRepeater" runat="server">
<HeaderTemplate><%= strHTML %></HeaderTemplate>
<ItemTemplate>
<tr>
<td class="fileRow colHeader">
<div class="chkbx"> <asp:CheckBox ID="chkbox" runat="server" ToolTip='<%#Eval("strCheckBox")%>' />
</div>
<div class="icn" style="background-image: url('<%# Eval("strGraphic")%>');"> </div>
<div class="flnm"><a href='<%# Eval("strLinkTo") %>' title='<%# Eval("strLinkTo") %>'><%# Eval("strFileName") %> </a><%# Eval("strAdditionalActions") %></div>
<div class="sz"><%# Eval("strSize") %></div>
<div class="typ"><%# Eval("FriendlyType") %></div>
<div class="mddt"><%# Eval("Modified") %> <%# Eval("strTimeZone") %></div>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</FooterTemplate>
</asp:Repeater>
我还需要能够获取文件名。我无法使用控件 ID,因为它不会在运行时绑定。但是,工具提示将毫无问题地采用变量值。
使用下面的代码,我能够获取与每个 CheckBox 关联的文件名及其选中条件。
foreach (RepeaterItem item in ParentRepeater.Items)
{
if(item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
{
CheckBox btn = item.FindControl("chkbox") as CheckBox;
string TEST33 = btn.ToolTip;
bool Test34 = btn.Checked;
}
}
评论