custom server control
От: hujg  
Дата: 10.11.11 19:34
Оценка:
Здравствуйте, народ!
Если задача создать кастомный серверный контрол с динамически создаваемыми контролами внутри него. Но столкнулся с проблемой, что при каждом постбэке теряются контролы которые я добавлял.
public class MyControl : Control
{
LinkButton addButton;
protected override void CreateChildControls()
{
base.CreateChildControls();
addButton = new LinkButton();
addButton.Text = "Add";
addButton.Click += new EventHandler(addButton_Click);
this.Controls.Add(addButton);
}

protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
EnsureChildControls();
}

void addButton_Click(object sender, EventArgs e)
{
this.Controls.Add(new DropDownList()); // this.Controls.Count всегда равен 1 при всех последующих постбках.
}

public string GetInfo() //Соответственно сколько бы я не кликал на кнопку Add, DropDownList-в в this.Controls не появляется. Help me please.
{
string info = "";
foreach (Control c in this.Controls)
{
if (c is DropDownList)
{
info += ((DropDownList)c).SelectedValue;
}
}
return info;
}
}
Re: custom server control
От: Lloyd Россия  
Дата: 10.11.11 21:12
Оценка:
Здравствуйте, hujg, Вы писали:

H>Если задача создать кастомный серверный контрол с динамически создаваемыми контролами внутри него. Но столкнулся с проблемой, что при каждом постбэке теряются контролы которые я добавлял.


Их надо пересоздавать на каждом постбэке. Добро пожаловать в чудный мир WebForms.
Re[2]: custom server control
От: Аноним  
Дата: 10.11.11 21:56
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, hujg, Вы писали:


H>>Если задача создать кастомный серверный контрол с динамически создаваемыми контролами внутри него. Но столкнулся с проблемой, что при каждом постбэке теряются контролы которые я добавлял.


L>Их надо пересоздавать на каждом постбэке. Добро пожаловать в чудный мир WebForms.


Ага, спасибо. Я чего то протупил.
Re[3]: custom server control
От: Аноним  
Дата: 11.11.11 07:31
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Lloyd, Вы писали:


L>>Здравствуйте, hujg, Вы писали:


H>>>Если задача создать кастомный серверный контрол с динамически создаваемыми контролами внутри него. Но столкнулся с проблемой, что при каждом постбэке теряются контролы которые я добавлял.


L>>Их надо пересоздавать на каждом постбэке. Добро пожаловать в чудный мир WebForms.


А>Ага, спасибо. Я чего то протупил.


Нет, я что-то все равно не понимаю. Если например хранить количество созданных ddl в скрытом поле
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
_hidden = new HiddenField();
this.Controls.Add(_hidden);
}
void addButton_Click(object sender, EventArgs e)
{
this.Controls.Add(new DropDownList());
_hidden.Value = this.Contnrols.Count++;
}
и потом пытаться пересоздавать ddl в CreateChildControls, так вот на момент вызова CreateChildControls в hidden.Value ничего нет, а значение в ней восстанавливается только к моменту вызова обработчика void addButton_Click(object sender, EventArgs e)
protected override void CreateChildControls()
{
base.CreateChildControls();
...
for(int i = 0; i < int.Parse(_hidden.Value); i++)
{ CreateDDL(); }
}

Как быть?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.