Вызов события страницы при вызове события пользовательского элемента управления ASP.NET - PullRequest
1 голос
/ 18 октября 2011

Предположим, на странице Paging.ascx есть пользовательский элемент управления, встроенный в PageWithResults.aspx. Этот элемент управления имеет необходимые свойства для отслеживания различных сведений о том, на какой странице вы находитесь (например, CurrentPage, TotalRecordsInResults, RecordsPerPage и т. Д.). Он также содержит события, которые срабатывают при нажатии на гиперссылку («следующая страница» или «предыдущая страница»). Пример ниже. Мне нужно сообщить PageWithResults.aspx, что один из этих веб-элементов управления LinkButton был нажат. Я думаю, что мне нужно назначить делегата на странице, чтобы при вызове этого события управления пользователем (гиперссылка была нажата) он также вызывал какой-то другой метод / событие в классе страницы. Таким образом, я могу быстро проверить, каково новое значение CurrentPage (на основе того, что было вызвано в событии ниже), и получить новый набор результатов для новой страницы (на основе свойства CurrentPage). Но я не уверен в лучшем подходе. Я думаю, что это потребует делегата, но я не уверен, как подключить это. Если вам нужна более подробная информация, пожалуйста, спросите.

    protected void btnNext_Click(object sender, EventArgs e)
    {
        this.CurrentPage = this.CurrentPage + 1;
        if (OnPageChanged != null) OnPageChanged(this.CurrentPage);
    }

Я думаю, что мне нужно куда-то отправить своего делегата. ??

    protected void btnNext_Click(object sender, EventArgs e)
    {
        this.CurrentPage = this.CurrentPage + 1;
        if (OnPageChanged != null) OnPageChanged(this.CurrentPage);
                    //delegate to call object.method or something
    }

1 Ответ

8 голосов
/ 18 октября 2011

Использование события будет работать нормально.

Вы создадите событие в вашем UserControl следующим образом:

public event EventHandler ButtonClicked;

Затем вызовите событие при необходимости:

protected void Button1_Click(object sender, EventArgs e)
{
    if (ButtonClicked != null)
        ButtonClicked(this, new EventArgs());
}

На вашей странице вам нужно было бы назначить обработчик события:

protected void Page_Load(object sender, EventArgs e)
{
    UserControl1.ButtonClicked += new EventHandler(UserControl1_ButtonClicked);
}

void UserControl1_ButtonClicked(object sender, EventArgs e)
{

}

Помимо использования вышеупомянутого подхода, вы также можете привести ссылку на страницу в UserControl и напрямую вызвать открытый метод:

MyPage page = (MyPage)Page;
page.AMethod();

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

...