Моя обработка событий веб-части не запускается в SharePoint - PullRequest
3 голосов
/ 03 июня 2010

Я начал кодировать что-то сложное, а потом понял, что мои обработчики событий не работают, поэтому я очень упростил кнопку с обработчиком событий. Пожалуйста, посмотрите код ниже, и, может быть, вы можете сказать мне, почему он не срабатывает?

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

    }
}

1 Ответ

2 голосов
/ 10 ноября 2010

У меня была похожая проблема. В моем случае кнопка содержалась на панели, и хотя кнопки на родительском элементе управления работали правильно, кнопка на дочернем элементе управления панели не работала.

Оказывается, вам нужно вызвать EnsureChildControls в методе OnLoad на дочерней панели, чтобы гарантировать, что CreateChildControls вызывается достаточно рано в жизненном цикле страницы , чтобы контролировать может отвечать на события. Это кратко описано в этом ответе здесь , где я нашел решение своей проблемы.

Следуя этой инструкции, я просто добавил следующий код в панель управления:

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

Я заметил, что на форумах возникает много путаницы по поводу этой проблемы, поэтому, чтобы продемонстрировать, что это работает, я добавил в свой код операторы трассировки. Ниже приведены результаты до и после случаев. Обратите внимание, что позиция Survey list creating child controls перемещается из события PreRender в событие Load.

До:

Before making the change to call EnsureChildControls in the OnLoad override

После того, как:

After making the change to call EnsureChildCOntrols in the OnLoad override which shows the child controls being created in the correct place in the page life cycle

...