如何在母版页中使用按钮并在内容页面中使用不同的按钮

时间:2014-08-18 17:22:34

标签: c# asp.net

我的MasterPage中有一个按钮:

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

如果我在page1.aspx上,则只显示Your task但是当我在page2.aspx上时,按下按钮,页面才会重新加载。

我该如何解决?

2 个答案:

答案 0 :(得分:1)

这可以使用界面解决。创建一个界面,定义您需要的操作。

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();
}

答案 1 :(得分:0)

添加事件处理程序的另一种方法是使用委托Action&lt;&gt;或者Func&lt;&gt;处理程序

在母版页中。

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() 
{
    //...
}