在标记我之前,或者标记为重复之前我已经看过了,但是在这里找不到我的答案,尽管有类似的问题 - 大多数都与asp.net控件上的javascript调用有关。这不是那个。
我试图根据绑定到转发器的数据源的值为转发器中的复选框提供id。
我对使用非asp.net控件的元素没有任何问题,但是当它提供一个复选框时,如下例所示我得到了错误
创建控件时出错 - rptPayments
服务器标签格式不正确。
这就是我现在试图命名的方式
<asp:CheckBox runat="server" ID="cbValidated_<%# Eval("ContactId")%>" />
我已经看到有很多问题出现在类似的问题上,但通常是javascript \ OnClientClick(..)函数告诉人们使用单引号。
如果我尝试单引号,我会收到新的错误
控件的ID属性只能使用标记中的ID属性和简单值来设置。示例
我需要这个作为服务器端控件,以便我可以循环浏览所有复选框,点击按钮以查看哪些记录已经过验证,但需要将其与contactId链接
答案 0 :(得分:3)
我认为您的批量更新按钮位于转发器之外。在这种情况下,您将让您循环遍历转发器项目并按以下步骤继续: -
protected void btnUpdate_Click(object sender, EventArgs e)
{
foreach (RepeaterItem item in MyRepeater.Items)
{
CheckBox cbValidated = item.FindControl("cbValidated") as CheckBox;
if (chkTest.Checked)
{
//Do Stuff (You can save some custom values in a list and finally update all)
}
}
}
<强>更新强>
正如评论中所提到的,正确的方法是将记录的id存储在隐藏变量中,而不是将其设置为控件的ID
(无论如何都不可能)。所以只需添加一个隐藏字段,如下所示: -
<ItemTemplate>
<asp:CheckBox ID="cbValidated" runat="server" Text='<%# Eval("foo") %>' />
<asp:HiddenField ID="hdnID" runat="server" Value='<%# Eval("ID") %>' />
</ItemTemplate>
此处,ID
是将映射到您的记录的列的名称。然后,如果用户选中了这样的复选框,则只需找到此值: -
//Rest code same as mentioned above
if (chkTest.Checked)
{
HiddenField hdnID = item.FindControl("hdnID") as HiddenField;
string id = hdnID.Value; //use this id for your logic.
}