当前位置:  开发笔记 > 编程语言 > 正文

ASP.NET动态命令按钮仅每隔一次触发一次

如何解决《ASP.NET动态命令按钮仅每隔一次触发一次》经验,为你挑选了1个好方法。

类似于这个问题,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并使用"选择此文本"的所有按钮填充面板(因为hdnDataListID尚未设置HiddenField控件的值()).

我第一次单击其中一个按钮,RenderDataItems来自PageLoad触发,然后是按钮的初始填充,HiddenField的值设置为ID,第二次RenderDataItems调用从SelectItem方法中发生.按钮被清除并重新创建.正确的按钮具有"选定项目"文本.

我第二次单击其中一个按钮,RenderDataItems来自PageLoad触发,然后是按钮的初始填充,但该SelectItem方法永远不会触发.

第三次单击其中一个按钮时,第一次发生相同的功能.第四个模仿第二个.第五个模仿第一个.等等等等.

当使用EditSelectItem未包含在面板中的控件中的方法时(它是一个DataSource绑定的GridView行,带有调用此方法的按钮),它完全按照我的预期进行操作并正确设置所选/未选中的按钮,同时调用RenderDataItemsEditSelectItem每次都是这个方法.

有任何想法吗?

PS我已经删除了这个页面上的所有AJAX.



1> matt-dot-net..:

你应该给你的Button b一个ID.

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有