Получить значение дополнительных элементов управления во время выполнения - PullRequest
0 голосов
/ 23 марта 2012

HTML

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <asp:Button runat="server" ID="show" OnClick="show_Click" Text="show"/>
    <asp:Button runat="server" ID="add" OnClick="add_Click" Text="add new "/>
    <div id="content" runat="server"></div>
</asp:Content>

код

protected void show_Click(object sender, EventArgs e)
{
    Response.Write(((CheckBox) content.FindControl("chb")).Checked);
}
protected void add_Click(object sender, EventArgs e)
{
    CheckBox chb = new CheckBox();
    chb.ID = "chb";
    chb.Text = "chb";
    content.Controls.Add(chb);

}

с помощью кнопки add добавлен новый checkbox во время выполнения.

тогда я хочу получить флажок chb с помощью кнопки show

, но ((CheckBox) content.FindControl("chb")).Checked вернуть значение Null.

Я хочу добавить флажок динамически, а затем проверил, что из них проверено, верно.

Ответы [ 3 ]

0 голосов
/ 23 марта 2012

Это происходит потому, что динамически добавленные элементы управления не сохраняются после обратных передач.Вы можете легко продемонстрировать это, добавив на страницу еще одну кнопку (без обработчика события щелчка).Запустите приложение и нажмите кнопку «Добавить», чтобы создать флажок, затем нажмите кнопку только что добавленного и флажок исчезнет после обратной передачи.

0 голосов
/ 23 марта 2012

Ну, я не могу понять, чего вы пытаетесь достичь, но;

  protected void show_Click(object sender, EventArgs e)
    {               
        Response.Write((Session["chb"] as CheckBox).Text);
    }
    protected void add_Click(object sender, EventArgs e)
    {
        CheckBox chb = new CheckBox();
        chb.ID = "chb";
        chb.Text = "chb";
        content.Controls.Add(chb);
        Session["chb"] = chb;

    }
0 голосов
/ 23 марта 2012

Ваши события не происходят в той же обратной передаче вашей страницы - когда вы нажимаете 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);
}
...