如何在MasterPage中拥有一个按钮,并在内容页面中使用不同的按钮

本文关键字:按钮 MasterPage 拥有 有一个 | 更新日期: 2023-09-27 18:18:27

我的主页上有一个按钮:

<asp:Button ID="tyt" runat="server" ClientIDMode="Static" OnClick="tyt_Click" UseSubmitBehavior="false" Text="SUBMIT A MESSAGEBOX" />

我想用这个按钮在不同的页面做不同的事情。

我在MasterPage中添加了以下内容:

public void tyt_Click(object sender, EventArgs e)
        {
            OnMasterControlClick(e);
        }
        protected void OnMasterControlClick(EventArgs e)
        {
            if (this.MasterControlClicked != null)
            {
                this.MasterControlClicked(this, e);
            }
        }

page1.aspx中的以下内容:

protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            if (this.Master is Site)
            {
                ((Site)this.Master).MasterControlClicked += new EventHandler(ContentControlClicked);
            }
        }
        private void ContentControlClicked(object sender, EventArgs e)
        {
            MessageBox.Show("your task");
        }

page2.aspx:

protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            if (this.Master is Site)
            {
                ((Site)this.Master).MasterControlClicked += new EventHandler(ContentControlClicked);
            }
        }
        private void ContentControlClicked(object sender, EventArgs e)
        {
            MessageBox.Show("your task");
        }

如果我在第1页,只有Your task显示。但是当我在第二页。我按下按钮,页面就会重新加载。

我该如何修复它?

如何在MasterPage中拥有一个按钮,并在内容页面中使用不同的按钮

这可以使用接口来解决。创建一个接口,定义您需要的一个或多个操作。

public interface IActionPage
{
    void Action();
}

然后让你的每个页面实现这个接口。

public partial class _Default : System.Web.UI.Page, IActionPage
{ 
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    public void Action()
    {
        MessageBox.Show("your task");
    }
}

最后,让母版页的按钮将当前页强制转换为接口,然后调用该方法。

protected void tyt_Click(object sender, EventArgs e)
{
    var ActionPage = this.Page as IActionPage;
    if (ActionPage != null)
        ActionPage.Action();
}

添加事件处理程序的另一种方法是使用委托Action<>或Func<>为处理程序

public Action MyButtonCallBack {get; set;}

子页

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    if (this.Master is Site)
    {
        ((Site)this.Master).MyButtonCallBack = DoSomething;
    }
}
private void DoSomething() 
{
    //...
}