【发布时间】:2009-04-15 09:47:06
【问题描述】:
如何在其母版页可以响应的内容页中引发事件?
例如,我有一个使用母版页的内容页。母版页包含网站导航栏。根据我所在的页面,我想向母版页发送一个事件,以更改导航栏中当前页面菜单项的 CSS 类。
我正在使用 Visual Studio 2008 和 ASP.NET 3.5 和 C#。
谢谢!
【问题讨论】:
标签: c# asp.net events master-pages
如何在其母版页可以响应的内容页中引发事件?
例如,我有一个使用母版页的内容页。母版页包含网站导航栏。根据我所在的页面,我想向母版页发送一个事件,以更改导航栏中当前页面菜单项的 CSS 类。
我正在使用 Visual Studio 2008 和 ASP.NET 3.5 和 C#。
谢谢!
【问题讨论】:
标签: c# asp.net events master-pages
编辑,根据您的要求,您实际上并不需要事件,您只想在主服务器上调用一个方法。在我的脑海中,在主人身上:
public void ChangeCss(string className)
{
someObject.CssClass = className;
}
然后在您的页面中:
(this.Master as MyMasterType).ChangeCss("myclass");
【讨论】:
如果事件发生在所有内容页面上,请使用 Kirtan 的 BasePage 解决方案。如果基本页面不合适,则在事件发生的每个页面中在页面加载时添加此页面。
thisPage.Event += (Page.Master as YourMasterPageClass).YourCustomEventHandler
【讨论】:
创建一个基本页面类。为相同的创建相应的委托和事件。然后在母版页中,执行此操作 -
(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.
【讨论】:
事件似乎不是表明这一点的最佳方式,因为您需要母版页来理解您的页面,您很可能在页面上有一个标准属性来指示它们在导航中的“键”。
在您的母版页代码中:
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"; }
}
}
【讨论】:
您可以使用称为 EventBubbling 的技术引发事件。
【讨论】: