在ASP.NET中将事件从页面发送到其母版页

时间:2009-04-15 09:47:06

标签: c# asp.net events master-pages

如何在内容页面中引发其主页可以响应的事件?

例如,我有一个使用母版页的内容页面。母版页包含网站导航栏。根据我所在的页面,我想将一个事件发送到母版页,以更改导航栏中当前页面菜单项的CSS类。

我正在使用Visual Studio 2008和ASP.NET 3.5和C#。

谢谢!

5 个答案:

答案 0 :(得分:2)

如果事件发生在所有内容页面上,请使用Kirtan的BasePage解决方案。如果基页不合适,那么在事件发生的每个页面中,在页面加载时添加此页面。

thisPage.Event += (Page.Master as YourMasterPageClass).YourCustomEventHandler 

答案 1 :(得分:2)

编辑,根据你的要求你真的不需要一个事件,你只想在主人身上调用一个方法。在我的头顶,在主人:

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

然后在你的页面中:

(this.Master as MyMasterType).ChangeCss("myclass");

答案 2 :(得分:0)

创建基页类。创建相应的代表&同样的事件。然后在母版页中,执行此操作 -

(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.

答案 3 :(得分:0)

事件似乎不是表明这一点的最佳方式,因为您需要使用母版页来理解您的网页,您可能会在页面上显示标准属性,以指示其在导航中的“关键字”。

在您的母版页代码中:

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"; }
    }
}

答案 4 :(得分:0)

您可以使用名为EventBubbling的技术来引发事件。