这可能是一个简单的问题,但我不是ASP.NET开发人员,而且我很困难。
我有一个简单的搜索例程,它返回零到几百个结果。其中每个都必须作为按钮添加到页面中,我想设置按钮的文本和CommandArgument属性,以便在单击按钮时我可以读取CommandArgument并做出相应的反应。
然而,当我点击按钮时,事件根本不会运行。我怎样才能让它运行?
构建按钮列表的代码(为便于阅读而简化)如下:
foreach (SearchResult sr in searchResults)
{
Button result = new Button();
result.Text = sr.name;
result.CommandArgument = sr.ID.ToString();
AccountSearchResults.Controls.Add(result);
result.Click += new EventHandler(SearchResultClicked);
AccountSearchResults.Controls.Add(new LiteralControl("<br/>"));
}
在测试的那一刻,我在表单上弹出一个标签,将CommandArgument放入。但这段代码从未执行过。
void SearchResultClicked(object sender, EventArgs e)
{
Label1.Text = ((Button)sender).CommandArgument;
}
答案 0 :(得分:1)
您在另一个答案中提到您在单击按钮时添加这些内容。查看代码,我建议您尝试为添加的每个按钮设置唯一ID,然后确保在加载页面时重新加载具有相同ID和CommandArgument值的按钮。单击动态加载的按钮后,在回发后要激活的事件仍必须存在于页面上。
我认为ID就是您所需要的,加上您对CommandArgument的要求。如果没有长时间的搜索过程就无法重复,可以将ID信息放在ViewState中。
答案 1 :(得分:0)
我认为您需要使用OnCommand事件处理程序,而不是OnClick,即尝试更改此内容:
result.Click += new EventHandler(SearchResultClicked);
到此:
result.Command += new EventHandler(SearchResultClicked);
尝试将事件处理程序的第二个参数类型从 EventArgs 更改为 CommandEventArgs 。您可能还需要在按钮上设置CommandName属性,即
result.CommandName = "foo";
答案 2 :(得分:0)
你在哪里添加这个按钮?
如果要在另一个控件中添加它们,那么事件可能会在父控件中引发。例如,在DataRepeaters和DataGrids上会发生这种情况。