Проблемы с распространением событий в пользовательском контроле asp.net - PullRequest
3 голосов
/ 06 января 2010

У меня есть простой пользовательский элемент управления, который содержит некоторые кнопки, которые запускают события, которые я хочу обрабатывать на странице с помощью элемента управления. У меня есть настройки кода:

public event EventHandler Cancel;
public event EventHandler Confirm;
public void Confirm_Click(object sender, EventArgs e)
{
    if (Confirm != null)
        Confirm(this, e);
}
public void Cancel_Click(object sender, EventArgs e)
{
    if (Cancel != null) 
        Cancel(this, e);
}

но когда я пытаюсь вызвать их со страницы, которая использует событие загрузки страницы элемента управления, я не получаю никаких пользовательских событий

ASPX код

<%@ Register TagPrefix="btg" TagName="CustomControl" Src="~/Search/CustomControl.ascx" %>
<btg:CustomControl ID="btgControl" runat="server" ></btg:CustomControl>

Может ли это быть из-за того, что мои кнопки в пользовательском элементе управления находятся на панели обновлений?

1 Ответ

1 голос
/ 06 января 2010

Вы не должны видеть методы. Вы должны видеть события.

При загрузке родительской страницы вам нужно сделать следующее:

myUserControl.Cancel += new EventHandler(myUserControl_Cancel);

Вы можете нажать tab, tab для автоматического создания заглушки метода. Это будет выглядеть так:

void myUserControl_Cancel(object sender, EventArgs e) {}

Затем этот код сработает после вызова в методе вашего пользовательского элемента управления. Чтобы этот код сработал, вам нужно назначить события событиям кнопок на вашем пользовательском элементе управления.

edit: myUserControl - это идентификатор вашего пользовательского элемента управления. Кроме того, некоторые утверждают, что обработчики событий должны быть в методе init вашей страницы.

редактирование:

Правильно ли указан ваш пользовательский элемент управления на странице? вы регистрируете пользовательский элемент управления в web.config или используете ссылочную директиву на странице?

Кроме того, вы пытались очистить раствор и восстановить его? Если ваш пользовательский элемент управления динамически создается / загружается, вам придется подключать события в той же области, что и экземплярный элемент управления. Чтобы динамически загружать пользовательский элемент управления, вам необходимо иметь заполнитель на своей странице и выполнять следующие действия:

UserControl control = Page.LoadControl("~/ControlPath/ControlName.ascx");
((MyUserControlClass)control).Cancel += += new EventHandler(myUserControl_Cancel); // etc...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...