在回发后处理动态添加按钮上的事件

时间:2011-12-13 20:49:05

标签: c# asp.net button event-handling

基本上,我有一个更新面板,其中我有一个链接按钮,当用户点击链接按钮时,所有内容都被清除,文本框显示在哪个用户输入内容,当用户点击输入键时,更新面板应该刷新或更新或重新填充所有内容。

我该怎么办?

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

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

请尝试用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事件处理程序没有被触发???

3 个答案:

答案 0 :(得分: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;
        }
    }
}

答案 1 :(得分: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();
   }

应该正确触发事件。对不起,我刚刚写了这个并没有测试它,但我希望它能给你一般的想法。

干杯。

答案 2 :(得分: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.net页面的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