добавить новое событие в кнопку - PullRequest
1 голос
/ 19 июля 2011
protected void Page_Load(object sender, EventArgs e)
{
        Button a = new Button();
        a.Width = 100;
        a.Height = 100;
        a.Text = "one";
        a.Click += new EventHandler(test);
        form1.Controls.Add(a);        
}

protected void test(object sender, EventArgs e)
{
    Button b = new Button();
    b.Width = 100;
    b.Height = 100;
    b.Text = "two";
    b.Click += new EventHandler(test2);
    form1.Controls.Add(b );
    Response.Write("aaaaaaaaaaaaaaaaaa");
}


protected void test2(object sender, EventArgs e)
{
    Response.Write("bbbbbbbbbbbbbbb");
}

при нажатии one Показать кнопку two, но при нажатии two кнопка не запускается test2 ????при нажатии на two обновление страницы.

я хочу сначала щелкнуть «один», а затем «два» показать кнопку только после нажатия кнопки а

Ответы [ 3 ]

3 голосов
/ 19 июля 2011

Попробуйте это:

protected void Page_Init(object sender, EventArgs e)
{
    Button a = new Button();
    a.Width = 100;
    a.Height = 100;
    a.Text = "one";
    a.Click += new EventHandler(test);
    form1.Controls.Add(a);

    Button b = new Button();
    b.Visible = false;
    b.Width = 100;
    b.Height = 100;
    b.Text = "two";
    b.Click += new EventHandler(test2);
    form1.Controls.Add(b);
}

protected void test(object sender, EventArgs e)
{
    b.Visible = true;
    Response.Write("aaaaaaaaaaaaaaaaaa");
}


protected void test2(object sender, EventArgs e)
{
    Response.Write("bbbbbbbbbbbbbbb");
}
2 голосов
/ 19 июля 2011

Вам необходимо воссоздать динамические элементы управления (например, новую кнопку b) и снова связать их обработчики событий на каждой обратной передаче .Таким образом, вам нужно переместить код с test на Page_Load.Если вы хотите показать кнопку только после нажатия кнопки a, либо сделайте кнопку b невидимой (простое решение), либо сохраните некоторое логическое значение в состоянии просмотра, которое вызывает создание b (более сложное решение).

0 голосов
/ 19 июля 2011

Каждый раз, когда к ASP-странице обращаются (или обновляют), объект воссоздается и запускается событие Page_Load.Это означает, что когда вы нажимаете первую кнопку, создается вторая, и событие подписывается на в этом экземпляре объекта страницы .

Когда вы нажимаете кнопку в следующий раз,создается новый объект страницы, и в этом объекте страницы событие, на которое никогда не подписывались.

Динамическое создание элементов управления часто является плохой идеей, вместо этого создайте все элементы управления и скройте те, которые вы не хотите отображать сразу,Также вам следует добавить проверку на IsPostBack в загрузке вашей страницы, чтобы вы могли различать первоначальную инициализацию и повторное создание объекта при обратной передаче.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...