Я делаю что-то похожее с адресом пользователя.
Поскольку вы добавляете элемент управления динамически, вам нужно будет заново создавать элемент управления после каждого постбэка (каждый раз, когда вы добавляете другой, вам необходимо воссоздать ВСЕ предыдущие элементы управления, которые вы добавили).
Я держу массив списков идентификаторов элементов управления (если вы хотите, чтобы viewstate сохранял содержимое, вам нужно создать элементы управления с такими же идентификаторами), который также отслеживает, сколько элементов управления я ранее добавил и которые необходимо воссоздать. Затем я повторяю цикл и снова создаю элементы управления в событии загрузки страницы:
foreach (string id in AddressItemIDs)
{
addAddressControl(null, id);
}
и затем мое событие "button1_click" (в моем случае я использую кнопку ссылки ...
protected void LinkButton1_Click(object sender, EventArgs e)
{
if (AddressCount == 0 || AddressCount < MaxAddresses && ((addressItem)addressContainer.Controls[addressContainer.Controls.Count-1]).HasAddress)
{
int i = 0;
string prefix = "addressItem_";
while (AddressItemIDs.Contains(prefix + i)) i++;
AddressCount++;
addAddressControl(null, prefix + i);
}
Button1.Visible = (AddressCount < MaxAddresses);
}
вот мой метод addAddressControl:
protected void addAddressControl(Address address, string id)
{
addressItem ai = (addressItem)LoadControl("~/controls/addressItem.ascx");
ai.RemoveClicked += new EventHandler(ai_RemoveClicked);
ai.ID = id;
if (address != null)
{
ai.AddressID = address.AddressID;
ai.Address = address.Street;
ai.City = address.City;
ai.State = address.State;
ai.Zip = address.Zip;
ai.TypeID = address.TypeID;
}
if(!AddressItemIDs.Contains(id))
AddressItemIDs.Add(id);
addressContainer.Controls.Add(ai);
}