【问题标题】:ASP.Net : How to call a Master page event handler from Content page event handler?ASP.Net:如何从内容页面事件处理程序调用母版页事件处理程序?
【发布时间】:2025-12-06 21:50:02
【问题描述】:

我有一个母版页,其中有一个链接按钮。在其中一个内容页面中,我需要隐藏链接按钮并替换为图像按钮。图像按钮的单击事件处理程序应该与母版页中链接按钮的单击事件完全相同。那么有没有办法从内容页面中的图片按钮点击事件处理函数中调用母版页链接按钮点击事件处理函数呢?

我已经研究过,似乎有很多万一母版页面想要调用内容页面中的事件处理程序......

任何输入输出都将受到高度赞赏。

谢谢

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    在您的母版页代码中,将事件处理程序上的 protected 关键字替换为 public。

        public void LinkButton1_Click(object sender, EventArgs e)
        {
            //Do Stuff Here
        }
    

    在您的内容页面中使用主类型指令

    <%@ MasterType VirtualPath="~/masters/SourcePage.master"" %> 
    

    在内容页面后面的代码中调用 Master 事件处理程序,如下所示

        protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
        {
            this.Master.LinkButton1_Click(sender, e);
        }
    

    注意代码是 C#。

    我正在考虑更直接地调用母版页事件处理程序

    【讨论】:

    • 感谢您的回复...是的,这就是我要找的...我通过将它们公开来从内容页面调用其他母版页方法...我怎么没想到活动也公开......对不起,我是 SF 的新手......所以我不能给你这个答案的功劳
    • 没问题,只是当你获得足够的声望时不要忘记,虽然你可能确实有足够的声望可以通过单击勾选来接受,但不足以支持投票。不过我可能是错的:-)
    【解决方案2】:

    还有@Master 指令(MSDN Article)。此方法提供了一种在从 Master 属性访问母版页时创建对 ASP.NET 母版页的强类型引用的方法。

    结果是强类型的,不需要强制转换。

    示例用法:

    <%@ MasterType VirtualPath="~/masters/SourcePage.master"" %>
    

    使用此指令实际上会产生与@Scott 的实现相同的代码,但不需要您知道母版页的类型。

    然后您可以通过以下方式开始使用您的母版页:

    Master.Title = "My Page Title";
    

    您也可以通过这种方式从主服务器调用事件。使用Master.FindControl找到你想要的主控。

    查找控件示例:

    HtmlAnchor btnMyImageButton = (HtmlAnchor)Master.FindControl("btnMyImageButton");
    

    但我建议使用 ImageButtonOnClick 属性并将其设置为母版页上可公开访问的 void/Sub。然后简单地调用那个 void/Sub 像:

    Master.ImageButtonClick();
    

    【讨论】:

      【解决方案3】:

      如果您的母版页是 MyMaster,请创建如下属性:

      Public Shadows ReadOnly Property Master() As MyMaster
          Get
              Return CType(MyBase.Master, MyMaster)
          End Get
      End Property
      

      然后,无论您想在母版页中访问什么,请确保它是公开的,您将能够通过以下方式访问它:

      Master.xxxx
      

      【讨论】:

        最近更新 更多