asp:button Создано программно: EventHandler не запускается

Я пишу веб-часть SharePoint, которая будет иметь простую форму ASP.NET. Я использую HtmlTextWriter для визуализации элементов управления. У меня проблема в том, что моя кнопка не запускает назначенный мне EventHandler.

Сначала я объявил кнопку в методе CreateChildControls и связал обработчик событий:

{
    Button submitButton;
    submitButton = new Button();
    submitButton.Text = "Go!";
    submitButton.Click += new EventHandler(submitButton_Click);
    Controls.Add(submitButton);
}

Я объявил функциональность EventHandler "submitButton_Click":

void submitButton_Click(object sender, EventArgs e)
{
    submitButton.Text = "Good!";
}

Я рендерим элементы управления:

protected override void RenderContents(System.Web.UI.HtmlTextWriter output)
{ 
        RenderChildren(output);
}

Наконец, я развернул веб-часть. Он хорошо отображается в каталоге, и когда я добавляю его на страницу, появляется элемент управления. Тем не менее, я предполагаю, что когда я нажимаю кнопку, ее текст должен измениться с "Go!" на "Хорошо!" Вместо этого он ничего не делает. Я довольно новичок во всех этих технологиях - C#, Sharepoint и ASP.NET - поэтому я почти уверен, что это проблема с моим пониманием, но я пробую разные шаги из статей по всей сети и предыдущих вопросов здесь. не решил мою проблему. Спасибо, что посмотрели.

РЕДАКТИРОВАТЬ: я открыл страницу SharePoint с веб-частью на ней, и кнопка была создана следующим образом:

<input type="submit" name="ctl00$PlaceHolderMain$ctl00$ctl04" value="Go!" />

Похоже, что значение OnClick вообще не было добавлено, как я и думал, добавив EventHandler. Я пытаюсь добавить OnClick совершенно неправильно? Я также не понимаю, почему имя кнопки не соответствует тому, что я объявил в своем коде.

4 ответа

Решение

Посмотрите на эту ссылку:

http://msdn.microsoft.com/en-us/library/ms452873.aspx

Вы неправильно переопределяете метод RenderContents и связываете событие click в неправильном месте.

Вы наследуете от System.Web.UI.WebControls.WebParts.WebPart или SharePoint WebPart (извините, я не помню пространство имен). Рекомендуется наследовать от "System.Web.UI.WebControls.WebParts.WebPart", чтобы это была простая веб-часть ASP.NET, которую также можно использовать в SharePoint.

Как только вы унаследуете от этого класса, вам нужно будет переопределить метод "Render", который я всегда делаю, и он работает нормально. Я думаю, что ваш метод CreatechildControls является правильным. Таким образом, ваш метод Render будет выглядеть

protected override void Render(System.Web.UI.HtmlTextWriter output)
{ 
        submitButton.RenderControl(write);
}

Вам также необходимо объявить свою кнопку вне метода "CreateChildControls". При написании веб-частей SharePoint я всегда придерживаюсь этого подхода.

  1. Наследовать от System.Web.UI.WebControls.WebParts.WebPart
  2. Создайте частичный класс, который будет использоваться для объявления всех элементов управления, используемых WebPart, и для переопределения следующих методов: "CreateChildControls", "OnInit" и "Render".

Надеюсь, поможет.

Вместо этого используйте переопределение CreateChildControls, оно вызывается в нужный момент в конвейере рендеринга элемента управления ASP.NET.

У меня была похожая проблема. Обработчик событий всегда стрелял. Я проверил источник представления страницы SharePoint и обнаружил, что отображаемым элементом управления HTML был тип ввода = submit. Чтобы решить эту проблему, я установил 'button.UseSubmitBehavior = false' в коде и установил идентификатор. UseSubmitBehavior по умолчанию в ASP.NET 2.0 имеет значение true, если не задано в коде.

Другие вопросы по тегам