如何在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
显示。但是当我在第二页。我按下按钮,页面就会重新加载。
我该如何修复它?
这可以使用接口来解决。创建一个接口,定义您需要的一个或多个操作。
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()
{
//...
}