Я наткнулся на проблему с моей формой asp.net.Доступ к динамически созданным текстовым полям
В моей форме конечный пользователь выбирает количество текстовых динамически создавать, все это прекрасно работает со следующим кодом:
protected void txtAmountSubmit_Click(object sender, EventArgs e)
{
int amountOfTasks;
int.TryParse(txtAmountOfTasks.Text, out amountOfTasks);
for (int i = 0; i < amountOfTasks; i++)
{
TextBox txtAddItem = new TextBox();
txtAddItem.ID = "txtAddItem" + i;
txtAddItem.TextMode = TextBoxMode.MultiLine;
questionNine.Controls.Add(txtAddItem);
txtList.Add(txtAddItem.ID);
}
}
Однако это также вызвало небольшую проблему для меня, позже в моей форме при нажатии кнопки отправки, я отправляю результаты указанному человеку, к которому ему нужно перейти (используя электронную почту smtp). Опять эта часть прекрасна, , пока я не пытаюсь извлечь текст из этих динамически созданных текстовых полей.
То, что я пытался
Я попытался с помощью this msdn access server controls ID method однако это не работает.
Я попытался добавить эти новые текстовые поля в список, однако я не знал, как обновлять эти текстовые поля, когда у них есть текст. Из-за этого мои результаты были возвращены null.
- Я также рассмотрел другие вопросы по SO, такие как this, но они обычно относятся к WPF или winforms, а не к моей проблеме с asp.net (это обычно не проблема, но мне не нужно текст из каждого элемента управления текстовыми полями на моей странице, только те, которые были динамически созданы).
Я также попытался изменить то, как я называю код, который я надеялся работал бы:
string textboxesText = string.Join("\n", txtList.Select(x => x).ToArray());
, а затем в моей сцепленной строке (электронная почта тело) я бы назвал:
textboxesText
Проблема
Поскольку они динамически созданы, мне трудно o вызовите их по их идентификатору, например: txtExampleID.Text, также, поскольку я должен каждый раз увеличивать идентификаторы по одному (поэтому они не переопределяют друг друга), это сделало вещи немного сложнее для меня.
Я не прошу решения для кода, я бы предпочел указатели в правильном направлении, поскольку я все еще участвую.
Итак, чтобы подвести итог: Мне нужно получить текст из динамически созданных текстовых полей, чтобы добавить его в свой почтовый ящик.
Вам необходимо изучить жизненный цикл страницы ASP.NET. Вы должны создавать свои динамические элементы управления в 'Page_Init', иначе они не будут существовать позже (как вы находите). – Belogix
Вы пытались использовать ретранслятор для создания текстовых полей? –
Вам необходимо воссоздать динамически созданные элементы управления с тем же идентификатором, что и раньше, при каждом обратном вызове в 'page_load'. Тем не менее, вы создаете их позже в первый раз. Поэтому просто сохраняйте (например, в 'ViewState' или в скрытом поле) счетчик уже созданных элементов управления, которые вы используете для их воссоздания в' Page_Init' или 'Page_Load' (если вы используете' ViewState'). Затем вы можете добавить новые 'TextBoxes' в' txtAmountSubmit_Click' и соответственно увеличить счетчик. –