У меня есть поле ввода на моей странице, где пользователь будет вводить количество текстовых полей, которые он хочет создать. Действие кнопки:
int num_flds = int.Parse(a_fld.Text);
for (int i = 0; i < num_flds; i++)
{
TextBox tmp = new TextBox();
tmp.ID = "answer_box" + i;
tmp.Width = Unit.Pixel(300);
answer_inputs.Controls.Add(tmp);
}
Теперь у меня есть еще одна кнопка, которую пользователь нажимал бы после того, как заполнил все свои динамически создаваемые текстовые поля. Вопросы, прежде всего, создаю ли я текстовые поля динамически в нужном месте? Как мне получить значения из динамически создаваемых текстовых полей? (Динамически создаваемые текстовые поля добавляются в панель "answer_inputs".





Я рекомендую прочитать это и несколько других статей по теме динамически создаваемых элементов управления. Это не так просто, как вы думаете. Следует учитывать несколько важных вопросов жизненного цикла страницы.
Я считаю, что при динамическом создании веб-элементов управления лучше, чтобы в ответах указывались сами элементы управления. Добиться этого можно так:
Создайте что-нибудь в своем классе Page для хранения значений:
private readonly Dictionary<TextBox, string> values=new Dictionary<TextBox, string>();
Сделайте метод, который будет действовать как обратный вызов для текстовых полей при изменении их значения:
void tmp_TextChanged(object sender, EventArgs e)
{
TextBox txt = sender as TextBox;
if (txt!=null)
{
values.Add(txt,txt.Text);
}
}
А затем добавьте этот метод в каждое текстовое поле по мере их добавления:
int num_flds;
if (!int.TryParse(a_fld.Text,out num_flds))
{
num_flds = 0;
}
for (int i = 0; i < num_flds; i++)
{
TextBox tmp = new TextBox();
tmp.ID = "answer_box" + i;
tmp.Width = Unit.Pixel(300);
answer_inputs.Controls.Add(tmp);
tmp.TextChanged += tmp_TextChanged;
}
Наконец, вы просматриваете словарь при обратном вызове, чтобы увидеть, содержит ли он какие-либо значения. Сделайте это, например, в методе OnPreRender.
Обновлено: с этим возникает проблема, если количество текстовых полей уменьшается при обратной передаче. Следует использовать какой-нибудь безопасный способ воссоздать предыдущие текстовые поля при обратной передаче.