【问题标题】:My webpart event handling does not fire in SharePoint我的 webpart 事件处理未在 SharePoint 中触发
【发布时间】:2011-02-27 08:35:41
【问题描述】:

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

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();
        //}

    }
}

【问题讨论】:

    标签: sharepoint event-handling web-parts


    【解决方案1】:

    我遇到了类似的问题。在我的情况下,按钮包含在面板中,虽然父控件上的按钮可以正常工作,但子面板控件上的按钮却没有。

    事实证明,您需要在子面板的OnLoad 方法中调用EnsureChildControls,以确保在life cycle of the page 中足够早地调用CreateChildControls,以便控件可以响应事件。这在this answer here 中进行了简要描述,这是我发现问题解决方案的地方。

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

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

    我注意到论坛中似乎有很多关于这个问题的混淆,所以为了证明这个工作我在我的代码中添加了跟踪语句。以下是前后案例的结果。请注意,Survey list creating child controls 的位置从 PreRender 事件内移动到 Load 事件内。

    之前:

    之后:

    【讨论】:

      猜你喜欢
      • 2011-09-07
      • 2011-04-18
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多