【问题标题】:Sending Event from a Page to its Master Page in ASP.NET在 ASP.NET 中将事件从页面发送到其母版页
【发布时间】:2009-04-15 09:47:06
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

    编辑,根据您的要求,您实际上并不需要事件,您只想在主服务器上调用一个方法。在我的脑海中,在主人身上:

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

    然后在您的页面中:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

          在您的母版页代码中:

          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】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-01-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多