内容页响应母版页控件的事件

来源:互联网 发布:如何开一家淘宝店铺 编辑:程序博客网 时间:2024/04/28 21:02

内容页响应母版页控件的事件

 

在内容页里面,如果想响应位于母版页的控件的事件,该怎么办呢?

MSDN开宗明义地告诉我们:对于控件而言,事件是在本地处理的,即内容页中的控件在内容页中引发事件,母版页中的控件在母版页中引发事件。控件事件不会从内容页发送到母版页。同样,也不能在内容页中处理来自母版页控件的事件。

那是否意味着内容页中不能处理母版页控件的事件?如果不行的话,真不方便!

不过我试了一下,发现只要将我们希望执行的函数委托给该控件的事件就可以。

比如说,在母版页中有个按扭

<asp:ButtonID="Button1" runat="server" Text="Button"/>

那么在内容页中可以在Page_Load里委托函数:

protected void Page_Load(object sender, EventArgs e)

{

Button B1 = (Button)Page.Master.FindControl("Button1");

B1.Click += new EventHandler(B1_Click);

}

然后将自己希望执行的代码放在函数B1_Click里:

    protected void B1_Click(object sender, EventArgs e)

    {

        Response.Write("Hello World!");

}

运行以后,按下Button1,页面即会显示Hello World!

如果母版页中也有该按扭Click事件:

    protected void Button1_Click(object sender, EventArgs e)

    {

        Response.Write("Hello BeiJing!");

}

那么这两个函数都会执行。顺序是先母版页,后内容页。

 

事件本质上是一个委托。委托这个东西,我的理解是一个函数的执行器,将函数传给它(委托给它,+=),就会按照先后顺序执行。委托就好比一支手枪,函数就好比子弹。只要子弹尺寸口径合适(函数的参数、类型符合声明),不管是中国造的子弹,还是德国造的子弹,都可以打出去。给一发打一发,给两发打两发。

 

另外,访问母版页的控件,可以通过类似(Button)Page.Master.FindControl("Button1");的方式。如果想访问母版页的属性,需要在内容页加入类似一句:<%@MasterType virtualpath="~/Master/list.master"%>

然后就可以通过 Master.属性的方式访问了。注意前面没有Page.

原创粉丝点击