Ваши события не происходят в той же обратной передаче вашей страницы - когда вы нажимаете add
, он добавляет флажок, но затем выполнение страницы заканчивается, страница отправляется клиенту, и это делается с обработкой Click
событие.
Когда вы затем нажимаете кнопку show
, это еще один постбэк, в котором ваш флажок не был создан, поэтому он не существует.
Чтобы справиться с этим, у вас есть несколько вариантов:
1.
Установите флажок на странице в конструкторе и установите для его свойства Visible
значение false
. Вы можете удерживать кнопку add
, но на самом деле она не добавит флажок на страницу, она просто сделает ее видимой, установив Visible
в true
.
2.
Если вы действительно хотите динамически добавить флажок, то вам нужно добавлять его каждый раз, когда страница выполняется, в одном из обработчиков событий страницы (например, Load
). Способ сделать это - сохранить значение в viewstate или в скрытом поле, когда вы нажимаете add
и в зависимости от значения вы устанавливаете флажок для последующих обратных передач.
protected void Page_Load (object sender, EventArgs e)
{
if ( IsPostBack )
{
if ( Session["chb"] != null )
CreateChb ();
}
}
protected void show_Click(object sender, EventArgs e)
{
Response.Write(((CheckBox) content.FindControl("chb")).Text);
}
protected void add_Click(object sender, EventArgs e)
{
Session["chk"] = true;
CreateChb ();
}
private void CreateChb ()
{
CheckBox chb = new CheckBox();
chb.ID = "chb";
chb.Text = "chb";
content.Controls.Add(chb);
}