2011-12-13 24 views
0

基本上,我有一个更新面板,其中有一个链接按钮,当用户单击链接按钮时,所有内容都被清除并且文本框显示在哪个用户输入的内容并且当用户按回车键时,更新面板应该被刷新或被更新或重新填充所有内容。在回发后处理动态添加的按钮上的事件

我该怎么做?

我试图做到这一点的方式是,当链接按钮的事件处理程序被激发时,我动态地创建了一个隐藏的按钮,并为其分配一个新的事件处理程序,当用户点击输入键时会被触发。按钮在链接按钮事件处理程序内部创建。在这个新的按钮事件处理程序中,我将重新填充内容。

我的方式的问题是动态创建的按钮的事件处理程序未被触发。 为什么?

请尝试用c#解答。 在此先感谢。

问候,

我的代码#

protected void Submit_Click1(object sender, EventArgs e) 
    { 
     Label1.Text = TextBox1.Text + TextBox2.Text + " are sucessfully registered"; 
     Button mento = new Button(); 
     mento.cssclass = "invisible"; 
     mento.Click += new EventHandler(mento_click); 
     // here this new mento button is attached to update panel 
     updatepanel1.ContentTemplateContainer.Controls.add(mento); 
    } 

现在的问题是mento_click事件处理程序不被解雇???

+0

你可以附加你的代码吗? – MRM 2011-12-13 20:53:26

+0

是的,请告诉我们你有什么,以及你看到了什么样的行为。 – McKay 2011-12-13 21:10:21

+0

我附上了一些我正在尝试做的相关代码。请看看你能否帮助我。谢谢 – gjohal 2011-12-14 13:54:28

回答

1

你可以在文本框中输入回车键吗?

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     //add event keydown 
     textBox1.KeyDown += new KeyEventHandler(textBox1_KeyDown); 

    } 
    void textBox1_KeyDown(object sender, KeyEventArgs e) 
    { 
     switch (e.KeyCode) 
     { 

      case Keys.Enter: 
       //YOur updatecode here: 
       MessageBox.Show("You press enter"); 
       break; 

      default: 
       break; 
     } 
    } 
} 
0

你必须附上page_init的Page_Load每次那里有一个请求,或该事件不会得到挂接到控件的事件。

你可以看看这个链接理解为什么:

http://msdn.microsoft.com/en-us/library/ms178472.aspx

如果你想要把它挂在提交你应该这样做:

page_init(object sender, EventArgs e) 
    { 
     CreateControls(); 
    } 

    private void CreateControls() 
    { 
     //Create button with event and add to the panel 
    } 

    clickEvent(object sender, EventArgs e) 
    { 
     updatePanel.Update(); 
    } 

这应该正确触发事件。对不起,我只是写了这个动态,并没有测试它,但我希望它给你一个普遍的想法。

干杯。

0

对于所有在asp.net中按钮回传的人,我想提一个处理按钮单击事件的替代和古老的方法。

1)使用前缀命名您的动态创建的按钮(例如这个:btn_)。这样,您创建的每个按钮都将有一个以此前缀开头的名称。例如,您创建的第一个按钮将具有名称btn_0。你可以通过这样一个例行做到这一点:

For _counter As Integer = 0 To 3 
Dim butt As New Button 
' the next 1 line is convenient when programming for the .net 4.0 framework: 
butt.ClientIDMode = UI.ClientIDMode.Static 
butt.butt.ID = "btn_" & _counter 
butt.Text = "someting" 
page.controls.add(butt) 
next 

2)......然后,来处理这一切,你可以像下面这样做在你的ASP的ON_LOAD事件。网页:

If IsPostBack Then 
    For Each key As String In Request.Form 
     If InStr(Trim(key), "btn_") > 0 Then 
      Response.Write(Request.Form(key)) 
     End If 
    Next 
End If 
相关问题