У меня есть Repeater, связанный с SQL, содержащий смесь редактируемых и доступных только для чтения элементов.Когда вы нажимаете кнопку «Редактировать» в строке, редактируемые части должны преобразовываться в текстовые поля, а когда вы нажимаете «Обновить», они должны сохранять ваши изменения.
Вот (очень) упрощенная версия кода OnClick кнопок «Редактировать и обновить»:
switch(commandName)
{
case "Edit":
Label1.Visible = false; //hide read-only version
PlaceHolder1.Visible = true; //show editing version
//Dict1 is Dictionary<string, string> in this example.
foreach (var key in Dict1)
{
//insert a TextBox dynamically into the PlaceHolder
PlaceHolder1.Controls.Add(new TextBox
{
ID = "txt" + key,
Text = Dict1[key]
});
}
break;
case "Update":
//retrieve user input from dynamically-added TextBoxes
foreach (var TextBox1 in PlaceHolder1.Controls.Where(c => c.ID.StartsWith("txt")))
{
doStuff(TextBox1);
}
Label1.Visible = true; //show read-only version
PlaceHolder1.Visible = false; //hide editing version
break;
}
Проблема в том, что мои динамически добавленные текстовые поля отсутствуют, когда страница отправляется обратно,Я изучил PlaceHolder1.Controls
в отладчике, и в нем нет текстовых полей.PlaceHolder1
сам находится внутри Repeater, но я не связываю Repeater с PostBack.
Я рассмотрел использование необработанного HTML вместо элементов управления TextBox и извлечение значений из Request.Form, но эточувствует себя хакером для меня.Как я могу сделать так, чтобы динамически добавляемые текстовые поля сохранялись во всех постбэках?
РЕДАКТИРОВАТЬ:
Есть некоторые сложности, которые трудно показать без тонныобразец кода.Вот основные из них:
- Каждая ячейка в повторителе может иметь смесь текста, доступного только для чтения, и редактируемого текста (т. Е. Динамически вставляемых меток и текстовых ящиков)
- Не знаюзнать, сколько редактируемых областей будет в каждой ячейке.Исходный текст может выглядеть как
blah blah @A1@ blah blah @A2@ blah...
, и мне придется вставлять замещающий текст вместо @ A1 @, @ A2 @ и т. Д. В режиме редактирования редактируется только этот замещающий текст.