Существует еще одно решение, не упомянутое, которое заключается в создании подклассов элементов управления ASP.NET и принудительной идентификации:
public class MyCheckBox : CheckBox
{
public string ForcedId { get;set; }
public override string ID
{
get
{
if (!string.IsNullOrEmpty(ForcedId))
return ForcedId;
else
return base.ID;
}
set
{
base.ID = value;
}
}
public override string ClientID
{
get
{
return ID;
}
}
}
Тогда используйте это , где вы знаете, что идентификаторы никогда не будут конфликтовать :
<mytag:MyCheckBox ForcedId="_myCheckbox" runat="server" />
Если вы используете списки, вам нужно написать ListControlAdapter, а также адаптеры для каждого типа используемого списка (выпадающий список, флажок, кнопка с переключателем, список). Либо скрестите ноги и подождите .NET 4.0.