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