Пахнет проблемой закрытия. Я догадываюсь, что во время каждой итерации просто присваивается значение, а не воссоздается. Поскольку все ваши элементы управления ссылаются на eob, а не на данные, возвращаемые eob, все они будут использовать одно и то же значение, когда придет время рендеринга.
Как выглядит ваша перегрузка LoadControl? Я прочитал статью, на которую вы ссылались, но я хотел бы увидеть, что вы конкретно сделали. Интересно, если бы просто переназначение значений из eob переменной, объявленной в вашем методе LoadControl, помогло бы вам преодолеть все трудности. Заставьте элементы управления использовать переменную из более узкой области видимости, чтобы они не могли физически видеть аргументы друг друга.
Редактировать: Нашел SO ссылку на тему: Что такое «замыкания» в .NET?
Дайте этому водовороту:
private UserControl LoadControl(string userControlPath, params object[] constructorParameters)
{
var constParamTypes = new List<Type>();
foreach (var constParam in constructorParameters)
{
constParamTypes.Add(constParam.GetType());
}
var ctl = Page.LoadControl(userControlPath) as UserControl;
// Find the relevant constructor
if (ctl != null)
{
var constructor = ctl.GetType().BaseType.GetConstructor(constParamTypes.ToArray());
// And then call the relevant constructor
if (constructor == null)
{
throw new MemberAccessException("The requested constructor was not found on : " + ctl.GetType().BaseType);
}
// constructor.Invoke(ctl, constructorParameters);
object[] cp = constructorParameters;
constructor.Invoke(ctl, cp);
}
// Finally return the fully initialized UC
return ctl;
}