我用事件处理程序动态创建了一个按钮。但事件没有解雇。请帮我这样做。我的部分代码在这里。
Button btn = new Button();
btn.ID = "btn" + i;
btn.Text = "Add New";
Panel1.Controls.Add(btn);
btn.Click += new EventHandler(this.GreetingBtn_Click);
Panel1.Controls.Add(new LiteralControl("<br /><br />"));
void GreetingBtn_Click(Object sender, EventArgs e)
{
create();
}
当我点击按钮时,我想访问create()函数。
答案 0 :(得分:0)
在不了解您的代码的情况下,我猜你没有在ASP.NET的page life cycle的适当阶段创建控件
你需要的是PreInit,如下所述:
在开始阶段完成之后和初始化阶段开始之前引发。 将此事件用于以下事项:
创建或重新创建动态控件。
答案 1 :(得分:0)
如果您要在页面加载时添加此动态按钮,请确保它位于
下if (!IsPostBack)
{
//add button here
}
答案 2 :(得分:0)
总是让你创建一个时间控件的代码应该在!ispostback
边,因为它们不需要一次又一次地创建
if (!IsPostBack)
{
//Your code should be their enter code here
}
答案 3 :(得分:0)
List<string> myControls = new List<string>();
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
myControls = new List<string>();
ViewState["myControls"] = myControls;
}
}
protected void override void LoadViewState(object savedState)
{
base.LoadViewState(savedState);
myControls = (List<string>)ViewState["myControls"];
foreach(string controlID in myControls){
//method to create your buttons goes here.
createButtons(controlID);
}
}
public void createButtons(string btnID){
Button btn = new Button();
btn.ID = btnID;
btn.Text = "Add New";
btn.Click += new RoutedEventHandler(this.GreetingBtn_Click);
Panel1.Controls.Add(btn);
Panel1.Controls.Add(new LiteralControl("<br /><br />"));
}
void GreetingBtn_Click(Object sender, RoutedEventArgs e){
create();
}
尝试使用此代码。在asp.net中动态添加控件时,您必须重新创建回发中的控件。最简单的方法是使用上面显示的 viewstate 。
不能正确执行此操作的常见迹象是:控制单击时消失或仅根本不会触发。希望这有助于某人!
答案 4 :(得分:-1)
将btn.Click += new EventHandler(this.GreetingBtn_Click);
行向上移动一级,即在添加到父级之前并尝试路由事件。
Button btn = new Button();
btn.ID = "btn" + i;
btn.Text = "Add New";
btn.Click += new RoutedEventHandler(this.GreetingBtn_Click);
Panel1.Controls.Add(btn);
Panel1.Controls.Add(new LiteralControl("<br /><br />"));
void GreetingBtn_Click(Object sender, RoutedEventArgs e)
{
create();
}