【问题标题】:ASP.NET dynamic Command Button only fires every other timeASP.NET 动态命令按钮仅每隔一次触发一次
【发布时间】:2010-08-12 15:27:59
【问题描述】:

ASP.Net Dynamic Command Button Event Not Firing 的这个问题类似,但问题略有不同。

下面提供的是我的代码的(非常)精简的版本。

    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 方法中的按钮那样进行更改。

我已经运行了调试器并单步执行了代码,看看会发生什么。加载页面时,从PageLoad 调用RenderDataItems 并使用具有“选择此文本”的所有按钮填充面板(因为尚未设置 HiddenField 控件的值 (hdnDataListID)。

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

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

第三次单击其中一个按钮时,会发生与第一次相同的功能。第4个模仿第2个。第 5 次模仿第 1 次。以此类推,以此类推。

当从不包含在面板中的控件中使用EditSelectItem 方法时(它是一个 DataSource 绑定的 GridView 行,带有调用此方法的按钮),它完全符合我的预期并正确设置选定/未选定按钮,每次都调用RenderDataItemsEditSelectItem 方法。

有什么想法吗?

附:我已经删除了此页面上的所有 AJAX。

【问题讨论】:

    标签: c# asp.net .net-2.0 postback


    【解决方案1】:

    你应该给你的按钮 b 一个 ID。

    【讨论】:

    • 抱歉,它被分配了一个唯一的 ID,我将编辑我的代码以反映这一点。
    • 我收回我之前的评论,我的代码的这一部分没有分配 ID。我把它放在我从中复制它的前一个块上,但显然要么删除它,要么在某个时候错过了复制该行。这似乎解决了它。谢谢!
    • 哦,天哪...我整个周末都在试图解决这个问题...正是我的问题。现在真正的问题是,为什么它每隔“其他”时间工作一次,没有 ID...
    • 这解决了我的问题。但问题仍然存在,为什么它会起作用?
    猜你喜欢
    • 1970-01-01
    • 2022-07-21
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 2014-01-17
    • 2016-06-30
    相关资源
    最近更新 更多