将事件处理程序添加到动态创建的按钮

时间:2017-11-10 14:48:00

标签: c# asp.net

我在c#codebehind中创建了一个按钮,并尝试向其添加事件监听器,但问题是如果我使用:

    {
        HtmlGenericControl dodaj = new HtmlGenericControl("button");
        dodaj.InnerText = "something";
        dodaj.Attributes.Add("runat", "server");
        dodaj.Attributes.Add("type", "submit");
        dodaj.Attributes.Add("onclick","addKosarica");
        newDivInfo.Controls.Add(dodaj);
        sadrzaj.Controls.Add(newDivInfo);
        this.Controls.Add(sadrzaj);
    }

    protected void addKosarica(object sender, EventArgs e)
    {
        Response.Redirect("www.google.com");  //just to see if it triggers
    }

我明白了:

  

“未捕获的ReferenceError:未定义addKosarica   HTMLButtonElement.onclick“

尝试使用Google搜索错误,这是关于javascript ...

然后在谷歌搜索后,我尝试了:

    {
        Button dodaj = new Button;
        dodaj.Text = "something";
        dodaj.Click += new EventHandler("addKosarica");
        newDivInfo.Controls.Add(dodaj);
        sadrzaj.Controls.Add(newDivInfo);
        this.Controls.Add(sadrzaj);
    }

    protected void addKosarica(object sender, EventArgs e)
    {
        Response.Redirect("www.google.com");//just to see if it triggers
    }

我得到了

  

“Button”类型的“控制'ctl07'必须放在表单标签内   使用runat = server。“

这是我的aspx代码:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="11001.aspx.cs" Inherits="_11001" %>

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">

</asp:Content>

(它并不多,因为我动态添加所有内容,除了按钮onclick处理程序之外一切正常...)

拜托,有人可以告诉我如何让这个工作......

编辑: sadrzaj是一个包含我正在添加的所有这些元素的div。 我将它们添加到从Page_Load()

调用的函数中

2 个答案:

答案 0 :(得分:0)

很抱歉,您在按钮服务器端和按钮客户端之间感到非常困惑。

第一个问题是:为什么不在aspx中添加按钮?

你需要循环一个集合并创建许多类似的按钮吗?您可以使用Repeater。

然后,阅读你的代码......你有一个母版页(我希望包含一个标签形式runat="server")。您必须将ID添加到要添加的控件中。

在您使用

创建onclick客户端(所以javascript)的第一段代码中
dodaj.Attributes.Add("onclick","addKosarica");

所以你可以删除:

protected void addKosarica(object sender, EventArgs e)
{
   Response.Redirect("www.google.com");//just to see if it triggers
}

并在aspx文件中添加函数addKosarica()。

在第二段代码中,正确的代码是:

dodaj.Click += myButton_Click;

正确的事件是

protected void myButton_Click(object sender, EventArgs e)

并且您可以在+ =

之后在Visual Studio中单击选项卡自动创建两次

我建议不要使用它。直接控制:它是指页面。您可以在Content标记中添加PlaceHolder控件或Panel控件,并向其添加控件。如果您使用this而不是PanelPlaceHolder,请尝试使用this.Form.Controls.Add

您可以参考:

https://msdn.microsoft.com/en-us/library/kyt0fzt1.aspx

https://support.microsoft.com/en-us/help/317794/how-to-dynamically-create-controls-in-asp-net-by-using-visual-c--net

答案 1 :(得分:0)

protected void Page_Load(object sender, EventArgs e)
        {
            Button dodaj = new Button();
            dodaj.Text = "Click Me!";
        dodaj.Attributes.Add("runat", "server");
        dodaj.Attributes.Add("type", "submit");
        dodaj.Attributes.Add("onclick", "addKosarica");
        newDivInfo.Controls.Add(dodaj);
        dodaj.Click += Dodaj_Click1;
    }

    private void Dodaj_Click1(object sender, EventArgs e)
    {
        Response.Write("Ok");
    }

aspx代码

<div runat="server" id="newDivInfo">