Получить текстовое значение из динамически создаваемых текстовых полей
Учитывая несколько динамически создаваемых текстовых полей, я хочу, чтобы текст заполнялся пользователем. Я использовал Panel и создание работ. Элемент управления для текстового поля не найден.
ASPX
<div>
<asp:Panel ID="Panel1" runat="server"></asp:Panel>
</div>
<div>
<asp:Button ID="Button1" runat="server" Text="Adauga autor" OnClick="Button1_Click" />
</div>
Создать текстовые поля
protected void Button1_Click(object sender, EventArgs e)
{
int rowCount = Convert.ToInt32(Session["clicks"]);
rowCount++;
Session["clicks"] = rowCount;
for (int i = 1; i <= rowCount; i++)
{
TextBox TxtBoxA = new TextBox();
Label lblA = new Label();
TxtBoxA.ID = "TextBoxA" + i.ToString();
lblA.ID = "LabelA" + i.ToString();
lblA.Text = "Label" + i.ToString() + ": ";
Panel1.Controls.Add(lblA);
Panel1.Controls.Add(TxtBoxA);
Panel1.Controls.Add(new LiteralControl("<br />"));
}
}
Получить текст
int rowCount = Convert.ToInt32(Session["clicks"]);
for (int i = 1; i <= rowCount; i++)
{
string item = "TextBoxA" + i.ToString();
Control foundControl = FindControl(item, Page.Controls);
TextBox TB = (TextBox)foundControl;
string txt = TB.Text;
}
+
public static Control FindControl(string controlId, ControlCollection controls)
{
foreach (Control control in controls)
{
if (control.ID == controlId)
return control;
if (control.HasControls())
{
Control nestedControl = FindControl(controlId, control.Controls);
if (nestedControl != null)
return nestedControl;
}
}
return null;
}
Элемент управления Textbox является нулевым. Что я делаю неправильно?
1 ответ
Вы должны воссоздать все элементы управления в Page_Load
самое позднее. Button1_Click
слишком поздно. Так воссоздай Session["clicks"]
в Page_Init
/Page_Load
и создать единый новый элемент управления в Button-Click
-handler.
Некоторый код:
protected void Page_Init(Object sender, EventArgs e)
{
RecreateControls();
}
private void RecreateControls()
{
int rowCount = Convert.ToInt32(Session["clicks"]);
CreateControls(rowCount);
}
private void AddControl()
{
int rowCount = Convert.ToInt32(Session["clicks"]);
CreateControls(1);
Session["clicks"] = rowCount++;
}
private void CreateControls(int count)
{
for (int i = 1; i <= count; i++)
{
TextBox TxtBoxA = new TextBox();
Label lblA = new Label();
TxtBoxA.ID = "TextBoxA" + i.ToString();
lblA.ID = "LabelA" + i.ToString();
lblA.Text = "Label" + i.ToString() + ": ";
Panel1.Controls.Add(lblA);
Panel1.Controls.Add(TxtBoxA);
Panel1.Controls.Add(new LiteralControl("<br />"));
}
}
protected void Button1_Click(object sender, EventArgs e)
{
AddControl();
}