向动态创建的按钮添加事件处理程序
我在 c# 代码隐藏中创建了一个按钮,并试图为其添加事件侦听器,但问题是如果我使用:
{
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
}
我得到:
"Uncaught ReferenceError: addKosarica is not defined at HTMLButtonElement.onclick"
尝试谷歌搜索错误,它与 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
}
我得到
"Control 'ctl07' of type 'Button' must be placed inside a form tag with 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() 调用的函数中
509326122
aspx代码
010109740
抱歉,但您对按钮服务器端和按钮客户端之间非常困惑。
第一个问题是:为什么不在 aspx 中添加按钮?
您是否需要循环集合并创建许多类似的按钮?您可以使用 Repeater。
然后,阅读您的代码...您有一个母版页(我希望包含一个标签形式
runat="server"
)。您必须将 ID 添加到要添加的控件。
在第一段代码中,您已使用
dodaj.Attributes.Add("onclick","addKosarica");
创建了 onclick 客户端(因此是 javascript)。
因此,您可以删除:
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 中自动创建 += 后两次单击选项卡
我还建议不要直接使用 this.Controls:它引用页面。您可以在 Content 标签中添加 PlaceHolder 控件或 Panel 控件,然后向其中添加控件。如果您使用
this
而不是
Panel
或
PlaceHolder
,请尝试使用
this.Form.Controls.Add
您可以参考: