【发布时间】:2019-01-23 08:03:27
【问题描述】:
我的应用程序包含一个网络表单,有人可能会在其中提取一些信息。发生这种情况时,我会根据内容多次加载一个用户控件,该控件上有一个 ImageButton。
由于这是在页面加载后加载的,我怎样才能让点击事件正常工作。由于在page_load期间需要设置点击事件。
示例场景:
Main.aspx
<form id="form1" runat="server">
<div>
<asp:Button ID="clicker" runat="server" Text="Click Me" />
<asp:PlaceHolder ID="PHwfuc" runat="server"></asp:PlaceHolder>
<asp:Label runat="server" ID="ResponseMessage"></asp:Label>
</div>
</form>
Main.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
clicker.Click += new EventHandler(this.ButClick);
}
protected void ButClick(object sender, EventArgs e)
{
PlaceHolder placeHolder = new PlaceHolder();
for (int i = 0; i < 2; i++)
{
WFUC1 test = LoadControl("~/WebFormUserControl/WFUC1.ascx") as WFUC1;
test.Ident = i;
placeHolder.Controls.Add(test);
}
PHwfuc.Controls.Add(placeHolder);
}
WFUC1.ascx
<asp:PlaceHolder runat="server" ID="DelAddrBtn"></asp:PlaceHolder>
<asp:Label runat="server" ID="ResponseMessage"></asp:Label>
<br />
WFUC1.ascx.cs
public WFUC1()
{
TrashIcon = new ImageButton
{
AlternateText = "Delete Address",
ImageUrl = "/images/trash.png",
ToolTip = "Delete Address",
};
TrashIcon.Style.Add("cursor", "pointer");
TrashIcon.Style.Add("width", "24px");
}
private ImageButton TrashIcon { get; set; }
public int Ident { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
TrashIcon.ID = $"Delete_{Ident}";
TrashIcon.Click += new ImageClickEventHandler(this.TrashIcon_Click);
DelAddrBtn.Controls.Add(TrashIcon);
}
protected void TrashIcon_Click(object sender, ImageClickEventArgs e)
{
ResponseMessage.Text = $"Use Control Got it. {Ident}";
}
为 Rango 编辑
WFUC1.ascx
<asp:ImageButton runat="server" ID="TrashIcon" ImageUrl = "/images/trash.png" ToolTip = "Delete Address" OnClick="TrashIcon_Click" />
<asp:Label runat="server" ID="ResponseMessage"></asp:Label>
<br />
WFUC1.ascx.cs
public partial class WFUC1 : System.Web.UI.UserControl
{
public int Ident { get; set; }
protected void TrashIcon_Click(object sender, ImageClickEventArgs e)
{
ResponseMessage.Text = $"Use Control Got it. {Ident}";
}
}
【问题讨论】:
-
这个用户控件实际上是一个带有输入框的地址编辑屏幕。此地址的用户可能有多个地址。在控件上,每个地址都有删除按钮,因此有人可以删除一条或多条记录。由于代码量大,这里不能全部贴出来,所以制作了这个demo。
-
我编辑了上面的代码,它仍然没有执行点击事件。
-
也许,我不是 100% 清楚.. 我需要动态加载用户控件,因为这个人可能有多个他们正在显示或编辑的地址。删除需要知道他们点击的是哪个删除。这就是为什么我不能只注册和显示控件。
-
尝试发布至少可以编译的代码。在 asp 和后面的代码之间有重复的变量名称,因此不清楚您希望访问哪个对象。
-
不是真的.. 他们之间有一个 Rango 的编辑.. 这个编辑替换了它上面的内容。我现在找到了答案。
标签: asp.net