Подсчет динамических элементов управления ASP.NET (создание элементов управления на ходу)

, я пытаюсь создать составной элемент управления ASP.NET, который позволит вам создать коллекцию редактируемых элементов управления.

Мои проблема в том, что когда я нажимаю кнопку добавления или обратной передачи (которая не делает ничего, кроме обратной передачи формы), все значения, введенные в текстовые поля, теряются.

Я не могу заставить его работать, когда количество элементов управления меняется между обратные передачи. Мне нужно иметь возможность воссоздать дерево элементов управления в два разных момента жизненного цикла элемента управления в зависимости от свойства состояния представления ControlCount .

Этот тест можно использовать для воспроизведения проблемы:

public class AddManyControl : CompositeControl
{
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        EnsureChildControls();
    }

    protected override void CreateChildControls()
    {
        var count = ViewState["ControlCount"] as int? ?? 0;

        for (int i = 0; i < count; i++)
        {
            var div = new HtmlGenericControl("div");
            var textBox = new TextBox();
            textBox.ID = "tb" + i;
            div.Controls.Add(textBox);
            Controls.Add(div);
        }

        ViewState["ControlCount"] = count;

        var btnAdd = new Button();
        btnAdd.ID = "Add";
        btnAdd.Text = "Add text box";
        btnAdd.Click += new EventHandler(btnAdd_Click);
        Controls.Add(btnAdd);

        var btnPostBack = new Button();
        btnPostBack.ID = "PostBack";
        btnPostBack.Text = "Do PostBack";
        Controls.Add(btnPostBack);
    }

    void btnAdd_Click(object sender, EventArgs e)
    {
        ViewState["ControlCount"] = (int)ViewState["ControlCount"] + 1;
    }

    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);
        // If I remove this RecreateChildControls call
        // the collection lags behind each postback
        // because the count is incremented in the btnAdd_Click event handler
        // however, the values are not lost between postbacks
        RecreateChildControls();
    }
}
5
задан John Leidegren 28 January 2011 в 00:09
поделиться