Несколько динамически создаваемых событий с обработчиками! (Идентификационный номер) - PullRequest
0 голосов
/ 07 ноября 2011

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

Вот первая необходимая часть моего кода для решения моей проблемы.

Это цикл for, по сути он создает несколько флажков с идентификаторами и обработчиками событий.

// All I am doing here is incrementing our session counter so we can increment our ID
int id = Convert.ToInt32(Session["id"]);
id++;
Session["id"] = id;

// Now I create my checkbox
chkDynamic = new CheckBox();
chkDynamic.Text = "hey";
string chk = "chk" + id.ToString();

chkDynamic.ID = chk;
chkDynamic.CheckedChanged += new EventHandler(chkDynamic_CheckedChanged);
Panel1.Controls.Add(chkDynamic);

Этот следующий раздел - наш пользовательский обработчик четности

protected void chkDynamic_CheckedChanged(object sender, EventArgs e)
    {

        if (((CheckBox)sender).Checked)
            Response.Write("you checked the checkbox :" + this.chkDynamic.ID);
        else
            Response.Write("checkbox is not checked");
    }

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

string chk = "chk" + id.ToString();

Кому:

string chk = "chk";

Но тогда, конечно, мы сталкиваемся с «несколькими элементами управления с одинаковым идентификатором»

Моя проблема заключается в том, чтобы заставить это работать с уникальными идентификаторами! Еще немного информации о ODD, которая может помочь. Если я вычеркну его из цикла и вручную добавлю флажок с другим идентификатором, он также будет работать. Это ошеломляет: (

    chkDynamic = new CheckBox();
    chkDynamic.Text = "hey";
   // string chk = "chk" + id.ToString();

    chkDynamic.ID = "hey1";
    chkDynamic.CheckedChanged += new EventHandler(chkDynamic_CheckedChanged);
    Panel1.Controls.Add(chkDynamic);

    chkDynamic = new CheckBox();
    chkDynamic.Text = "hey";
   // string chk = "chk" + id.ToString();

    chkDynamic.ID = "hey2";
    chkDynamic.CheckedChanged += new EventHandler(chkDynamic_CheckedChanged);
    Panel1.Controls.Add(chkDynamic);

Я также отладил свою программу, и значения, сохраненные в Session ["id"], не являются ни нулевыми, ни поврежденными. Всегда держать значение 0 и выше!

Спасибо за внимание, ребята / девочки. Я действительно застрял на этом!

PS - Извините. Там нет ошибок. События просто не запускаются, если я не кодирую идентификаторы.

Ответы [ 2 ]

0 голосов
/ 07 ноября 2011

Может быть, вы забудете сбросить sesssion («ID»), поэтому, когда страница отправляется обратно, флажки восстанавливаются с новыми идентификаторами. Поскольку флажки заново создаются при каждой обратной передаче, они должны каждый раз иметь один и тот же идентификатор, и если они этого не делают, они воспринимаются как новые элементы управления, и поэтому обработчик событий не вызывается.

0 голосов
/ 07 ноября 2011

Вы пытались установить свойство AutoPostBack ваших флажков на true?

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