gpt4 book ai didi

asp.net - Web表单用户控件事件,需要在页面加载后添加

转载 作者:行者123 更新时间:2023-12-02 16:07:49 24 4
gpt4 key购买 nike

我的应用程序由一个 Web 表单组成,有人可能会在其中提取一些信息。当发生这种情况时,我会根据内容多次加载用户控件,该控件上有一个 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}";
}

编辑兰戈

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}";
}
}

最佳答案

看来,我必须再次重新加载主控件上的所有控件才能执行单击事件。我无意中完成了这项工作。

Below Project Visual Studio 2017 - 没有二进制文件,除了一张图像之外,其余只是项目代码。

Main.aspx

<form id="form1" runat="server">
<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>
</form>

Main.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
clicker.Click += new EventHandler(this.ButClick);

if(ViewState["ButClick"] != null)
LoadData();
}

protected void ButClick(object sender, EventArgs e)
{
LoadData();
}

private void LoadData()
{
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);
ViewState["ButClick"] = true;
}

WFUC1.ascx

<asp:ImageButton runat="server" ID="TrashIcon" ImageUrl = "/images/trash.png" ToolTip = "Delete Address" OnClick="TrashIcon_Click" />
<br />
<asp:Label runat="server" ID="ResponseMessage"></asp:Label>

WFUC1.ascx

public int Ident { get; set; }

public void TrashIcon_Click(object sender, ImageClickEventArgs e)
{
ResponseMessage.Text = $"Use Control Got it. {Ident}";
}

关于asp.net - Web表单用户控件事件,需要在页面加载后添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54221640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com