Динамическая командная кнопка ASP.NET срабатывает только через раз - PullRequest
2 голосов
/ 12 августа 2010

Аналогично этому вопросу здесь Событие динамической кнопки команды ASP.Net не срабатывает , но с немного другой проблемой.

Ниже приводится (очень) сжатая версия моего кода.

    protected void Page_Load(object sender, EventArgs e)
    {
        RenderDataItems();
    }

    private void RenderDataItems()
    {
        pnlDataItems.Controls.Clear()
        DataTable dt = MyClass.GetAllData();

        foreach (DataRow dr in dt.Rows)
        {
            Button b = new Button();
            b.Command += new CommandEventHandler(SelectItem);
            b.CommandArgument = dr["ID"].ToString();
            b.ID = "btnData" + dr["ID"].ToString();

            if (hdnDataListID.Value == dr["ID"].ToString())
            {
                b.Text = "Selected Item";
            }
            else
            {
                b.Text = "Pick This Item";
            }
            pnlDataItems.Controls.Add(b);
        }
    }

    private void SelectItem(object sender, CommandEventArgs e)
    {
        hdnDataListID.Value = e.CommandArgument.ToString();
        RenderDataItems();
    }

    private void EditSelectItem(int id)
    {
        MyClass mc = new MyClass(id);
        hdnDataListID.Value = mc.ID.ToString();
        RenderDataItems();
    }

Метод SelectItem вызывается только с помощью элементов управления кнопки, отображаемых в методе RenderDataItems.EditSelectItem вызывается отдельным элементом управления, который создается динамически, но не требует изменения, которого требуют кнопки в методе RenderDataItems.

Я запустил отладчик и прошел через код, чтобыпосмотрим что получитсяКогда страница загружена, RenderDataItems вызывается из PageLoad и заполняет панель всеми кнопками, имеющими «Pick This Text» (потому что значение элемента управления HiddenField (hdnDataListID) не было установлено).

В первый раз, когда я нажимаю одну из кнопок, срабатывает RenderDataItems из PageLoad, затем идет начальное заполнение кнопок, значение HiddenField устанавливается на идентификатор, а второй RenderDataItems вызываетсяпроисходит изнутри SelectItem метод.Кнопки очищены и воссозданы.Правильная кнопка имеет текст «Выбранный элемент».

Во второй раз, когда я нажимаю одну из кнопок, запускается RenderDataItems из PageLoad, за которым следует начальное заполнение кнопок, но SelectItem метод никогда не срабатывает.

В третий раз, когда я нажимаю одну из кнопок, происходит та же функциональность, что и в 1-й раз.4-й имитирует 2-й.5-й имитирует 1-й.И так далее, и так далее.

При использовании метода EditSelectItem из элементов управления, не содержащихся на панели (это строка GridView с привязкой к DataSource с кнопками, вызывающими этот метод), он работает точно так же, как я 'Я ожидал и правильно устанавливал выбранные / невыбранные кнопки, каждый раз вызывая методы RenderDataItems и EditSelectItem.

Есть идеи?

PS Я уже удалил всемоего AJAX на этой странице.

1 Ответ

9 голосов
/ 13 августа 2010

Вы должны дать своей кнопке b идентификатор.

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