我的Web部件事件处理在SharePoint中未启动

我的Web部件事件处理在SharePoint中未启动,sharepoint,event-handling,web-parts,Sharepoint,Event Handling,Web Parts,我开始编写一些复杂的代码,然后意识到我的事件处理程序不起作用,所以我用事件处理程序超级简化了一个按钮。请看下面的代码,也许你能告诉我为什么它不点火 using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Web.UI; using System.Web.UI.WebControls.WebParts; using Microsoft.SharePoint;

我开始编写一些复杂的代码,然后意识到我的事件处理程序不起作用,所以我用事件处理程序超级简化了一个按钮。请看下面的代码,也许你能告诉我为什么它不点火

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using System.Web.UI.WebControls;
namespace PrinterSolution
{
    [Guid("60e54fde-01bd-482e-9e3b-85e0e73ae33d")]
    public class ManageUsers : Microsoft.SharePoint.WebPartPages.WebPart
    {
        Button btnNew;


        protected override void CreateChildControls()
        {
            btnNew = new Button();
            btnNew.CommandName = "New";
            btnNew.CommandArgument = "Argument";
            btnNew.Command += new CommandEventHandler(btnNew_Command);
            this.Controls.Add(btnNew);
        }

        void btnNew_Command(object sender, CommandEventArgs e)
        {
            ViewState["state"] = "newstate";
        }



        //protected override void OnLoad(EventArgs e)
        //{
        //    this.EnsureChildControls();
        //}

    }
}

我也有类似的问题。在我的例子中,按钮包含在一个面板中,虽然父控件上的按钮工作正常,但子面板控件上的按钮没有

事实证明,您需要在子面板的
OnLoad
方法中调用
EnsureChildControls
,以确保在中足够早地调用
CreateChildControls
,以便控件能够响应事件。这是我发现问题解决方案的地方

按照此说明,我刚刚将以下代码添加到面板控件:

    protected override void OnLoad(EventArgs e)
    {
        EnsureChildControls();
        base.OnLoad(e);
    }
我注意到论坛中对这个问题似乎有很多困惑,为了证明这是可行的,我在代码中添加了跟踪语句。以下是之前和之后案例的结果。请注意,创建子控件的测量列表的位置从PreRender事件内移动到Load事件内

之前:

之后: