使用中继器时,我的行为不一致。我有一个带有从DataTable填充的文本框的中继器。一切正常工作了一会儿,然后出现以下错误。
找到了多个具有相同ID“ txt”的控件。 FindControl要求控件具有唯一的ID。
该错误似乎在第二个会话上发生:
重建和调试:一切正常。
停止调试并再次调试:无限期错误,直到重建。
任何想法会导致这种情况吗?预先感谢。
答案 0 :(得分:0)
错误表明您对文本框使用了相同的ID。您必须对诸如“ txt_data_ {uniqueId}”之类的文本框使用动态ID。这里的uniqueId可以是索引,也可以使用您的数据主键。
在这里您可以看到图像标签的答案:https://forums.asp.net/t/1655369.aspx?Multiple+controls+with+the+same+ID
这将对您有所帮助:Set ID of Items In a Repeater
答案 1 :(得分:0)
解决方案非常简单,但是我误以为这只是在第二个调试会话中开始发生的事实。
我在使用带有孩子的自定义TextBox控件时,将以下内容添加到自定义文本框中即可解决此问题。
public override string ID
{
get
{
return base.ID;
}
set
{
base.ID = value;
if(mTextBox != null)
mTextBox.ID = "txt" + base.ID;
}
}
但是,我仍然想了解为什么此问题仅从第二个调试会话开始。我可以在第一个会话上重新加载页面10次以上,而不会出现任何错误,并且只有当我重新启动调试时才会出现错误。
我能想到的唯一原因是aspx中继器缓存有冲突的数据?