Контроль Добавить PostBack Проблема - PullRequest
0 голосов
/ 11 января 2010

Я добавляю управление динамически, но; easc Postback событие, мои элементы управления исчезли. Я не могу снова увидеть мои элементы управления.

Итак, как я могу добавить контроль?

Ответы [ 4 ]

1 голос
/ 11 января 2010

Поскольку вы должны воссоздавать свои элементы управления на каждой обратной передаче, см. Эту статью

0 голосов
/ 16 мая 2012

Добавление элементов управления во время выполнения и сохранение при обратной передаче:

int NumberOfControls = 0;

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        ViewState["b1"] = 0;
    }
    else
    {
        if ((int)ViewState["b1"] > 0)
        {
            CreateBtn();

        }
    }
}


protected void btn1_Click(object sender, EventArgs e)
{
    NumberOfControls = (int)ViewState["b1"];

    Button b1 = new Button();
   // b1.Attributes.Add("onclick", "x()");
    b1.Text = "test2";

    b1.ID = "b1_" + ++NumberOfControls;
    b1.Click +=new  System.EventHandler(btn11);
    Panel1.Controls.Add(b1);
    ViewState["b1"] = NumberOfControls;
}

protected void CreateBtn()
{
    for (int i = 0; i < (int)ViewState["b1"];i++)
    {
        Button b1 = new Button();
        // b1.Attributes.Add("onclick", "x()");
        b1.Text = "test2";
        b1.ID = "b1_" + i;
        b1.Click += new System.EventHandler(btn11);
        Panel1.Controls.Add(b1);
    }
}

protected void btn11(object sender, System.EventArgs e)
{
    Response.Redirect("AboutUs.aspx");
}
0 голосов
/ 11 января 2010

Добавьте элементы управления в событие Init страницы, и они будут сохранены в состоянии просмотра при повторной публикации. Убедитесь, что у них есть уникальный идентификатор.

Смотрите эту ссылку ...

ASP.NET Добавить элемент управления при обратной передаче

Очень тривиальный пример ..

public partial class MyPage : Page
{
    TextBox tb;

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        tb = new TextBox();
        tb.ID = "testtb";
        Page.Form.Controls.Add(tb);
    }

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        //tb.Text will have whatever text the user entered upon postback
    }
}
0 голосов
/ 11 января 2010

Вы должны всегда назначать уникальный идентификатор для UserControl в его свойстве ID после загрузки элемента управления. И вы всегда должны заново создавать UserControl при обратной передаче.

Чтобы сохранить данные обратной передачи (т.е. TextBox'ы), вы должны загрузить UserControl в переопределенном методе LoadViewState после вызова base.LoadViewState - до обработки данных обратной передачи.

...