快速业务通道

强类型引用母版页子控件

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21

今天整理代码的时候发现一直对母版页内ContentPlaceHolder的引用,使用 的控件查找方式:

程序代码

this.Master.FindControl("SideBarBox") as ContentPlaceHolder

这样做的原理大概就是通过在母版页内查找控件ID,然后通过反射进行调用 的。反射本身就是极其影响效率的一种方式,特别是在页面访问量特别大的时候 ,不做缓存处理,那么对于服务器来说是一场噩梦。虽然还有生成静态页面的方 法,但是现在谈的是如何使用强类型引用母版页子控件。

于是开始做实验,首先在母版页声明:

程序代码

public static ContentPlaceHolder sideBarBox;

然后在protected void Page_Load(object sender, EventArgs e)里面将页 面的ContentPlaceHolder引用给sideBarBox。结果运行出错,没有给对象赋值。

仔细想了一下,估计是子页的Page_Load比母版页的Page_Load要先处理,所 以导致为空。看了一下MSDN,确实是这样的,页面的加载顺序如下:

母版页控件 Init 事件。

内容控件 Init 事件。

母版页 Init 事件。

内容页 Init 事件。

内容页 Load 事件。

母版页 Load 事件。

内容控件 Load 事件。

内容页 PreRender 事件。

母版页 PreRender 事件。

母版页控件 PreRender 事件。

内容控件 PreRender 事件。

知道这些问题就好解决了,将母版页的Page_Load放到Page_Init里面去:

程序代码

protected void Page_Init(object sender, EventArgs e)
  {
    sideBarBox = SideBarBox;
  }

然后在子页这样调用:

程序代码

using System;
using Yeeoh.View.Controls.FrontEnd;
public partial class error : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
    FE_Error.InitErrorPage(ErrorBox, MasterPage.sideBarBox);
  }
}

呵呵,一切问题都解决了,然后发现在母版页中的ContentPlaceHolder可以 进行嵌套,你可以用这样的方法随便进行覆盖或其他操作。

在上海开心的日子就要结束了,这一年的旅行让我大开眼界,结识了不少的 朋友,个个都十分的优秀。甚至于我已经习惯于和他们相处,并产生留在这里的 想法。不过现实却是有太多的事情需要我去做,放弃在上海安逸稳定的生活,实 在是迫不得已。

希望在接下来创业的日子里面,我还会有时间,有心情,写这些很无趣的东 西,呵呵,一切都会更好。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号