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

发布于 2024-07-18 04:19:31 字数 186 浏览 7 评论 0原文

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

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

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

谢谢!

How do I raise an event in a content page that its master page can then respond to?

For example, I have a content page which is using a master page. The master page contains the website navigation bar. Depending on the page I'm on, I'd like to send an event to the master page to change the CSS class of the current page menu item in the navigation bar.

I'm using Visual Studio 2008 and ASP.NET 3.5 and C#.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

嗼ふ静 2024-07-25 04:19:31

编辑,根据您的要求,您实际上并不需要事件,您只想调用主机上的方法。 在我的脑海中,在主控中:

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

然后在你的页面中:

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

Edit, from what your asking you don't really need an event, you just want to call a method on the master. off the top of my head, in the master:

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

then in your page:

(this.Master as MyMasterType).ChangeCss("myclass");
无戏配角 2024-07-25 04:19:31

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

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

If the event happens on all content pages use Kirtan's BasePage solution. If a base page isn't appropriate, then within each page where the event happens add this when the page loads.

thisPage.Event += (Page.Master as YourMasterPageClass).YourCustomEventHandler 
离笑几人歌 2024-07-25 04:19:31

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

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

Create a base page class. Create the respective delegate & event for the same. Then in the master page, do this -

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

The page class must be like this -

public class MyPage : BasePage { }

The BasePage class must be like this -

public class BasePage : System.Web.UI.Page { } //This will go in the App_Code folder.
青衫负雪 2024-07-25 04:19:31

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

在您的母版页代码中:

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

An event doesn't seem like the best way to indicate this, given you need your masterpage to understand your pages, you could well have a standard property on the pages that indicates their 'key' in the navigation.

In your masterpage code:

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

    var navigatable = this.Page as INavigatable;

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

Navigatable interface:

public interface INavigatable
{
    string NavigationKey { get; }
}

Page instance:

public class AboutPage : Page, INavigatable
{
    public string NavigationKey
    {
        get { return "About"; }
    }
}
攒一口袋星星 2024-07-25 04:19:31

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

You can raise the event using a technique called as EventBubbling.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文