Проблема с программно сгенерированными элементами управления - PullRequest
0 голосов
/ 26 июня 2011
public partial class Default2 : System.Web.UI.Page
{

    protected void Page_Load(object sender, EventArgs e)
    {
        GenerateButtons generate = new GenerateButtons();
        generate.Generate5Controls(PlaceHolder1);

    }


}


class GenerateButtons
{
    PlaceHolder placeHolder;
   public  void Generate5Controls(PlaceHolder placeH)
    {
        placeHolder = placeH;
        for (int i = 0; i < 5; i++)
        {
            Button newBtn = new Button();
            newBtn.Click += btn_Click;
            newBtn.Text = "PageLoadButton Created. Number: "+i;
            placeHolder.Controls.Add(newBtn);
        }
    }
    public void btn_Click(object sender, EventArgs e)
    {
        Button newBTN = new Button();
        newBTN.Text = "A New Button was added by the button event btn_click";
        newBTN.Click += btn2_Click;
        placeHolder.Controls.Add(newBTN);

    }
    public void btn2_Click(object sender, EventArgs e)
    {
        Button newBTN = new Button();
        newBTN.Text = "A New Button was added by the button event btn2_click";
        placeHolder.Controls.Add(newBTN);
    }
}

Я хочу, чтобы события btn_click & btn2_click запускали каждый пост обратно. Когда я нажимаю кнопку, которая была создана программным способом, она исчезает после каждого постбэка, и ее событие не срабатывает (btn2_click).Я знаю, что мог сгенерировать кнопку при обратной передаче. Но я не хочу этого делать !!Я хочу знать, как можно обновить состояние заполнителя ... чтобы появилась единственная кнопка и исчезли 5 кнопок, созданных в Generate5Controls (PlaceHolder placeH).

Я мог бы использовать bool Viewstate дляпредотвратить это генерировать. Generate5Controls (PlaceHolder1);от выполнения ..

Но вопрос в том, как заставить программно сгенерированную кнопку появляться!?

1 Ответ

1 голос
/ 26 июня 2011

Вы должны сгенерировать элементы управления для каждого PostBack или вы можете сгенерировать элементы управления один раз, сохранить в сеансе и добавить созданные элементы управления из сеанса в событие page_load.

protected void Page_Load(object sender, EventArgs e)
    {
       if(Session["GeneratedButtons"] == null)
       {
          GenerateButtons generate = new GenerateButtons();
          generate.Generate5Controls(PlaceHolder1);
       }
       else
       {
           List<Control> generatedControls = Session["GeneratedButtons"] as List<Control>;
           foreach(Control oneControl in generatedControls)
           {
               PlaceHolder1.Controls.Add(oneControl);
           }
       }
    }

class GenerateButtons
{
    PlaceHolder placeHolder;
   public  void Generate5Controls(PlaceHolder placeH)
    {
        placeHolder = placeH;
        List<Control> generatedControls = new List<Control>();
        for (int i = 0; i < 5; i++)
        {
            Button newBtn = new Button();
            newBtn.Click += btn_Click;
            newBtn.Text = "PageLoadButton Created. Number: "+i;
            placeHolder.Controls.Add(newBtn);
            AddControlToSession(newBtn);
        }
    }
    public void btn_Click(object sender, EventArgs e)
    {
        Button newBTN = new Button();
        newBTN.Text = "A New Button was added by the button event btn_click";
        newBTN.Click += btn2_Click;
        placeHolder.Controls.Add(newBTN);
        AddControlToSession(newBtn);
    }

    public void btn2_Click(object sender, EventArgs e)
    {
        Button newBTN = new Button();
        newBTN.Text = "A New Button was added by the button event btn2_click";
        placeHolder.Controls.Add(newBTN);
        AddControlToSession(newBtn);
    }

    private void AddControlToSession(Control ctrl)
    {
        List<Control> generatedControls = Session["GeneratedButtons"] as List<Control>;
        if(generatedControls == null)
        {
            generatedControls = new List<Control>();
        }
        generatedControls.Add(ctrl);
        Session["GeneratedButtons"] = generatedControls;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...