代码之家  ›  专栏  ›  技术社区  ›  Adam Kane

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

  •  1
  • Adam Kane  · 技术社区  · 15 年前

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

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

    我使用的是Visual Studio 2008、ASP.NET 3.5和C。

    谢谢!

    5 回复  |  直到 13 年前
        1
  •  2
  •   Andrew Bullock    15 年前

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

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

    然后在您的页面中:

    (this.Master as MyMasterType).ChangeCss("myclass");
    
        2
  •  2
  •   Martin Clarke    15 年前

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

    thisPage.Event += (Page.Master as YourMasterPageClass).YourCustomEventHandler 
    
        3
  •  0
  •   Kirtan    15 年前

    创建基本页类。为同一个项目创建相应的委托和事件。然后在母版页中,执行此操作-

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

    page类必须是这样的-

    public class MyPage : BasePage { }
    

    basepage类必须如下-

    public class BasePage : System.Web.UI.Page { } //This will go in the App_Code folder.
    
        4
  •  0
  •   meandmycode    15 年前

    一个事件似乎不是表示这一点的最佳方法,因为您需要您的母版页来理解您的页面,您很可能在页面上有一个标准属性,指示它们在导航中的“键”。

    在母版页代码中:

    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"; }
        }
    }
    
        5
  •  0
  •   RedBottleSanitizer    13 年前

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