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 я всегда придерживаюсь этого подхода.
- Наследовать от System.Web.UI.WebControls.WebParts.WebPart
- Создайте частичный класс, который будет использоваться для объявления всех элементов управления, используемых WebPart, и для переопределения следующих методов: "CreateChildControls", "OnInit" и "Render".
Надеюсь, поможет.
Вместо этого используйте переопределение CreateChildControls, оно вызывается в нужный момент в конвейере рендеринга элемента управления ASP.NET.
У меня была похожая проблема. Обработчик событий всегда стрелял. Я проверил источник представления страницы SharePoint и обнаружил, что отображаемым элементом управления HTML был тип ввода = submit. Чтобы решить эту проблему, я установил 'button.UseSubmitBehavior = false' в коде и установил идентификатор. UseSubmitBehavior по умолчанию в ASP.NET 2.0 имеет значение true, если не задано в коде.