Отправка события со страницы на ее главную страницу в ASP.NET - PullRequest
1 голос
/ 15 апреля 2009

Как вызвать событие на странице содержимого, на которую может ответить его главная страница?

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

Я использую Visual Studio 2008 и ASP.NET 3.5 и C #.

Спасибо!

Ответы [ 5 ]

2 голосов
/ 15 апреля 2009

Если событие происходит на всех страницах контента, используйте решение Kirtan BasePage. Если базовая страница не подходит, то на каждой странице, где происходит событие, добавьте ее при загрузке страницы.

thisPage.Event += (Page.Master as YourMasterPageClass).YourCustomEventHandler 
2 голосов
/ 15 апреля 2009

Редактируйте, исходя из того, что вы спрашиваете, вам на самом деле не нужно событие, вы просто хотите вызвать метод на мастере. с макушки головы, у мастера:

public void ChangeCss(string className)
{
    someObject.CssClass = className;
}

тогда на вашей странице:

(this.Master as MyMasterType).ChangeCss("myclass");
0 голосов
/ 04 мая 2011

Вы можете вызвать событие, используя технику, называемую EventBubbling.

0 голосов
/ 15 апреля 2009

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

В коде вашей мастер-страницы:

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);

    var navigatable = this.Page as INavigatable;

    if (navigatable != null)
        this.Navigation.ActiveKey = navigatable .NavigationKey;
}

Навигационный интерфейс:

public interface INavigatable
{
    string NavigationKey { get; }
}

Экземпляр страницы:

public class AboutPage : Page, INavigatable
{
    public string NavigationKey
    {
        get { return "About"; }
    }
}
0 голосов
/ 15 апреля 2009

Создать базовый класс страницы. Создайте соответствующий делегат и событие для того же. Затем на главной странице сделайте это -

(Page as BasePage).Event += attach event handler here in the master page.

Класс страницы должен быть таким -

public class MyPage : BasePage { }

Класс BasePage должен быть таким -

public class BasePage : System.Web.UI.Page { } //This will go in the App_Code folder.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...