我正在尝试制作一个 C# 网页,该网页根据表单提交的内容动态创建按钮,但我一直跑到死胡同。问题是(显然?)您只能在 Page_Load 期间连接 EventHandlers,而不是在按钮的 Click 事件内?
基本上我有一些代码来创建一个按钮:
private Button CreateButton(string id, string text) {
Button b = new Button();
b.ID = id;
b.Text = text;
b.Command += new CommandEventHandler(Button_Command);
b.CommandArgument = text;
return b;
}
当这些新按钮被点击时,它们应该传递命令参数,并根据这些命令参数创建新按钮
void Button_Command(object sender, CommandEventArgs e) {
//Put code here that creates new buttons based on what's submitted
DoThis(e.CommandArgument.ToString());
}
但是当我在按钮的 Click 事件中运行此代码时,新创建的按钮的 EventHandler 不会被连接起来。
第一次点击页面时,只有一个文本输入和一个 GO 按钮。它应该创建一堆新按钮及其命令参数:
protected void bntGo_Click(object sender, e EventArgs){
DoThis(txtInput.Text);
}
private void DoThis(string arg){
//Do some logic to create a Dictionary<string, int> object (sortedDict)
//based on the arg passed, then for each KeyValuePair in the Dictionary,
//add a button to a panel on the page, setting each button's commandarguments
//to each string in the dictionary
int count=1;
foreach (KeyValuePair<string, int> pair in sortedDict) {
pnlButtonsPanel.Controls.Add(CreateButton("Btn"+count.ToString(), pair.Key));
}
}
我该如何做到这一点?我不能在每次页面加载时只运行 DoThis() 函数,因为 DoThis() 需要从他们单击的按钮传递 CommandArguments,而这在 page_load 中不可用。
我究竟做错了什么?我需要一种新方法。我在想自己在这里。
谢谢!