如何处理内容页面中的母版页按钮事件?

时间:2011-04-16 14:25:20

标签: c# asp.net webforms master-pages

关于同一个问题不仅仅是问题和文章,而且我还有一些相关的问题,希望得到一些答案。

  1. 我听说有两种方法可以找到按钮并添加处理程序或使用界面(检查来自here的两种方法)。你建议哪一种?

  2. 如果你能用一些代码来说明'Interface'选项,那么在我尝试继承它时,界面文件的类别在页面中是不可读的!

2 个答案:

答案 0 :(得分:8)

第二个方法是IMO更好。第一个选择是将页面耦合到特定的母版页,这并不好。

所有文件都放在同一个文件夹中。

IPageInterface.cs:

namespace CallFromMasterPage
{
    public interface IPageInterface
    {
        void DoSomeAction();
    }
}

Default.aspx.cs:

namespace CallFromMasterPage
{
    public partial class Default : System.Web.UI.Page, IPageInterface
    {
        public void DoSomeAction()
        {
            throw new NotImplementedException();
        }
    }
}

Site.Master.cs:

namespace CallFromMasterPage
{
    public partial class SiteMaster : System.Web.UI.MasterPage
    {
        protected void Button1_Click(object sender, EventArgs e)
        {
            IPageInterface pageInterface = Page as IPageInterface;
            if (pageInterface != null)
            {
                pageInterface.DoSomeAction();
            }
        }
    }
}

还有其他方法。例如。您可以通过event broker发布活动。

答案 1 :(得分:0)

从我的Openion中看,最好是使用事件处理程序......甚至使用自定义委托......

像这样

public delegate ReturnType MasterPageButtonHandler(CustomEventArgs ObjPriargs);
public event MasterPageButtonHandler MasterPagebuttonClick;
.
.
.
.
Button.click+=new EventHandler(Button1_Click);
.
.
.
protected void Button1_Click(Object sender,EventArgs e)
{
     if(MasterPagebuttonClick!=null)
     {
         CustomEventArgs ObjPriargs=new CustomEventArgs();
         ObjPriargs.Property1=SomeValu1;
         ObjPriargs.Property2=SomeValu2;
         MasterPagebuttonClick.Invoke(ObjPriargs);
     }
}
.
.
.
public class CustomEventArgs
{
      Public DataType Property1{get;set;}
      Public DataType Property2{get;set;}
      Public DataType Property3{get;set;}
}
.
.
.
//    Now in your aspx Page
MyMaster m=Page.Master as MyMaster;
m.MasterPagebuttonClick+=new MasterPageButtonHandler(MasterPageHandler_Click);
.
.
.
protected void MasterPageHandler_Click(CustomEventArgs ObjPriargs)
{
    //You code/////
}

通过这种方式提供一些灵活性,如果将来你想要在点击时传递一些数据导览内容页面,就可以轻松实现。