【问题标题】:CommandEventArgs and Event questionCommandEventArgs 和事件问题
【发布时间】:2011-06-15 10:44:18
【问题描述】:

我生成了几个按钮,并为它们附加了一个像这样的事件处理程序:

Button pgs = new Button();//Create New Topic
pgs.Width = 20;
pgs.Command += obtainTopicsPerPage_Click;
pgs.CommandName = tPage.ToString();
pgs.Text = tPage.ToString();
btns.Add(tPage.ToString());
buttons.Add(pgs);
}

void obtainTopicsPerPage_Click(Object sender, CommandEventArgs e)
{
    foreach (var item in tPages)
    {
        if (item.Key == e.CommandName)
        {
            foreach (var posts in item.Value)
            {
                posts.ExecuteAll();
             }
        }
    }
    MyButtonTable();
}

现在,当我单击按钮时,事件处理程序永远不会触发。我用调试器检查,当我点击按钮时,只有一个回发,但它没有到达事件处理函数的内部

更新:

    void Page_PreInit(object sender, EventArgs e)
{
    List<Button> btn=(List<Button>)ViewState["Buttons"];
    foreach (var item in btn)
    {
            item.Width = 20;
            item.Command += obtainTopicsPerPage_Click; //resigning the eventhandlers from the begining
             item.CommandName = tPage.ToString();
             item.Text = tPage.ToString();
    }
}

【问题讨论】:

  • 回发后你是否再次连接按钮事件?
  • 应该是 pgs.Command += new CommandEventHandler(this.obtainTopicsPerPage_Click); ?
  • 不是真的,Renius...,不,我不知道 WraithNath

标签: c# asp.net events


【解决方案1】:

动态生成按钮时经常出现这种情况。当页面回发时,页面不再有按钮,因此无法将它们绑定到事件处理程序。

最简单的解决方案是确保在每次加载页面时重新生成 Page_Init 中的所有按钮。

【讨论】:

  • 但是我生成的按钮是一个列表,它是通过代码动态生成的..根据论坛中有多少帖子生成...我应该将列表保存到视图state 然后放到page_init中...进行迭代?
  • 您可以使用与生成原始按钮列表相同的代码。您只需要确保它在每个 page_init 上运行,以便按钮始终存在。如果按钮可能在第一次加载和回发之间发生了变化,那么您可能希望将动态数据存储在视图状态中,以便再次构建原始按钮集。总而言之,关键是重建它们。
  • 那么我如何保存他们的事件处理程序...这样做就足够了吗?查看我上面的问题更新
猜你喜欢
  • 2010-12-03
  • 1970-01-01
  • 2016-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-13
相关资源
最近更新 更多