代码之家  ›  专栏  ›  技术社区  ›  Chizl

Web窗体用户控件事件,需要在页面加载后添加

  •  3
  • Chizl  · 技术社区  · 6 年前

    我的应用程序由一个Web表单组成,可能有人在其中提取一些信息。当发生这种情况时,我将根据内容多次加载一个上面有ImageButton的用户控件。

    由于在页面已经加载之后正在加载此项,因此如何才能使单击事件正常工作。因为在页面加载期间需要设置Click事件。

    示例场景:

    MIN

    <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>
    

    MIA.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.ASX

    <asp:PlaceHolder runat="server" ID="DelAddrBtn"></asp:PlaceHolder>
    <asp:Label runat="server" ID="ResponseMessage"></asp:Label>
    <br />
    

    WFC1.AsXC.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.ASX

    <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 />
    

    WFC1.AsXC.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}";
        }
    }
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Chizl    6 年前

    似乎,我必须重新加载主控件上的所有控件,才能执行单击事件。我不小心做了这个工作。

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

    MIN

    <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>
    

    MIA.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.ASX

    <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.ASX

    public int Ident { get; set; }
    
    public void TrashIcon_Click(object sender, ImageClickEventArgs e)
    {
        ResponseMessage.Text = $"Use Control Got it. {Ident}";
    }
    
    推荐文章