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

嵌套控件的事件未在UserControl中触发

  •  2
  • Davita  · 技术社区  · 14 年前

    你好 我有个奇怪的问题。我有一个用户控件,我通常使用LoadControl加载它。在这个UserControl中,我有一个分配了OnClick事件的按钮,但是当我单击该按钮时,事件不会被触发。

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ServiceInput.ascx.cs"
    Inherits="uPay.UserControls.ServiceInputs.ServiceInput" ViewStateMode="Disabled" %>
        <div class="PopupFoot">
            <asp:Button ID="btnAdd" CssClass="PopupADD" runat="server" OnClick="btnAdd_Click" />
        </div>
    
        protected void btnAdd_Click(object sender, EventArgs e)
        {
            //Method never gets called :/
        }
    

    protected void ServicesUpdatePanel_Load(object sender, EventArgs e)
    {
            string arg = Request.Params.Get("__EVENTARGUMENT");
            if (arg == "ServiceInput")
            {
                int serviceId;
                if (Int32.TryParse(hdnSelectedService.Value, out serviceId))
                {
                    using (Entities db = new Entities())
                    {
                        LocalizedServiceRecord service = db.ServiceRecords.OfType<LocalizedServiceRecord>().FirstOrDefault(s => s.Id == serviceId && s.Language.Id == CurrentLanguage.Id);
                        lblPopupTitle.Text = service.Name;
                        ServiceInputBase serviceInput = LoadInputControl(service);
                        InputServicePlaceHolder.Controls.Add(serviceInput);
                        ServicesUpdatePanel.Update();
                    }
                }
            }
    }
    
        private ServiceInputBase LoadInputControl(ServiceRecord service)
        {
            ServiceInputBase serviceInput = LoadControl("~/UserControls/ServiceInputs/ServiceInput.ascx") as ServiceInputBase;
    
            return serviceInput;
        }
    

    你知道吗?

    1 回复  |  直到 14 年前
        1
  •  4
  •   Davita    13 年前

    很长时间了,但也许有人会觉得有用。问题是当我点击 btnAdd ,它引发了一次回发,在它触发之前 btnAdd_Click ,用户控件已被销毁。

    这个问题的解决方案是在回发时重新创建usercontrol。