创建动态按钮及其事件处理程序

时间:2015-01-04 22:32:18

标签: asp.net dynamic eventhandler

我正在尝试使用动态按钮和事件。当我点击静态按钮时,我显示了动态按钮。但当我点击动态按钮时,我没有工作dinamikButon_Click事件。我错了什么?对不起我的语言。 Thx提前。

Default.aspx.cs如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace TestWebApplication
{
public partial class _Default : Page
{
    int i = 1;
    Button dinamikButon;
    protected void Page_Load( object sender, EventArgs e )
    {

    }

    protected void btnStatik_Click( object sender, EventArgs e )
    {
        dinamikButon = new Button
        {
            Text = "Dinamik" + i,
            ID = "btnDinamik" + i,
            CommandArgument = "commandArgument",
            CommandName = "commandName"

        };
        dinamikButon.Click += dinamikButon_Click;
        panel1.Controls.Add( dinamikButon );
        i++;
    }

    void dinamikButon_Click( object sender, EventArgs e )
    {
        Label1.Text = "Merhaba dinamik butondan geliyorum.";
    }

}
}

2 个答案:

答案 0 :(得分:2)

那是因为当页面回发时按钮不存在。您必须在页面Load或PreInit上创建按钮。 Microsoft建议PreInit You can dynamically set a master page or a theme for the requested page, and create dynamic controls.

    int i = 1;
    Button dinamikButon;
    private void Page_PreInit(object sender, EventArgs e)
    {
        if(Page.IsPostBack)
        {
            CreateButton();
        }
    }

    protected void btnStatik_Click( object sender, EventArgs e )
    {
        CreateButton();
    }

    private void CreateButton()
    {
        dinamikButon = new Button
        {
            Text = "Dinamik" + i,
            ID = "btnDinamik" + i,
            CommandArgument = "commandArgument",
            CommandName = "commandName"

        };
        dinamikButon.Click += dinamikButon_Click;
        panel1.Controls.Add( dinamikButon );
        i++;
    }

<强>更新

执行您现在要求的操作我们必须指定使用viewstate,querystring或session创建按钮。

在这个例子中,我将使用一个会话:

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        if (Page.IsPostBack)
        {
            if (Session["Created"] != null)
            {
                CreateButton();
            }
        }
    }

    private void CreateButton()
    {
        dinamikButon = new Button
        {
            Text = "Dinamik" + i,
            ID = "btnDinamik" + i,
            CommandArgument = "commandArgument",
            CommandName = "commandName"

        };

        Panel1.Controls.Add(dinamikButon);
        dinamikButon.Click += dinamikButon_Click;
        i++;
        Session["Created"] = "true";
    }

    private void dinamikButon_Click(object sender, EventArgs e)
    {
        //your action here
    }

答案 1 :(得分:0)

使用动态按钮

填充“Label1”控件中的值

Default.aspx的

                <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="DynamicCtrl._Default" %>

                <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                <html xmlns="http://www.w3.org/1999/xhtml">
                <head runat="server">
                    <title></title>

                    <script type="text/javascript" language="javascript">
                        function dynamicevnt() {
                            document.getElementById("Label1").innerHTML = "Merhaba dinamik butondan geliyorum.";
                            return false;
                        }
                    </script>

                </head>
                <body>
                    <form id="form1" runat="server">
                    <div>
                        <asp:Button ID="btnStatik" runat="server" Text="Click" OnClick="btnStatik_Click" />
                        <asp:Label ID="Label1" runat="server"></asp:Label>
                        <asp:Panel ID="panel1" runat="server">
                        </asp:Panel>

                    </div>
                    </form>
                </body>
                </html>

Default.aspx.cs

            using System;
            using System.Collections.Generic;
            using System.Linq;
            using System.Web;
            using System.Web.UI;
            using System.Web.UI.WebControls;

            namespace DynamicCtrl
            {
                public partial class _Default : System.Web.UI.Page
                {

                    protected void Page_Load(object sender, EventArgs e)
                    {

                    }
                    protected void btnStatik_Click(object sender, EventArgs e)
                    {
                        CreateButton();
                    }
                    private void CreateButton()
                    {
                        int i = 1;
                        Button dinamikButon = new Button();
                        dinamikButon.Text = "Dinamik" + i;
                        dinamikButon.ID = "btnDinamik" + i;
                        dinamikButon.OnClientClick = "return dynamicevnt();";
                        dinamikButon.Click += new EventHandler(dinamikButon_Click);
                        panel1.Controls.Add(dinamikButon);
                        i++;
                    }
                    protected void dinamikButon_Click(object sender, EventArgs e)
                    {
                        Label1.Text = "Merhaba dinamik butondan geliyorum.";
                    }
                }
            }