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