母板页和内容页事件执行的顺序

来源:互联网 发布:周传雄 黄昏 知乎 编辑:程序博客网 时间:2024/06/05 22:42

今天在弄搜索界面与后台连接显示这块出现了如下的错误:


    这样的错误首先是从后台来去找,发现后台没有任何的错误, 就是前台的问题了, 前台界面实在是找不出来就和牛腩的源码进行了对比, 对不的结果是没有错误的, 但是我直接运行搜索框这个页面就是不行. 后来想到的母板页面的错误, 母板中的代码:

namespace UI{    public partial class common : System.Web.UI.MasterPage    {        protected void Page_Load(object sender, EventArgs e)        {        }        //搜索按钮.        protected void ibtnSearch_Click(object sender, ImageClickEventArgs e)        {                     string key =  txtKey.Text.Trim();                                  //判断搜索是根据标题还是内容.用三元运算符.                        string action=radTitle .Checked ? "bytitle" :"bycontent";            //点击按钮重定向到页面.            //跳转的是当前根目录下的search.aspx文件.是相对路径. 并给key编码.            Response.Redirect("~/search.aspx?key=" + Server.UrlEncode(key) + "&action=" + action);                        }    }}


    而搜索页的代码;

namespace UI{    public partial class search : System.Web.UI.Page    {        protected void Page_Load(object sender, EventArgs e)        {            if (!Page.IsPostBack)            {                //获取html查询变量的集合.               // string key =Request.QueryString["key"];                string key = Server.UrlDecode(Request.QueryString["key"]);                             string action = Request.QueryString["action"];                if ("bytitle" == action)                {                    //按标题搜索                                       gvNews .DataSource = new NewsManager().SelectByTitle(key);                    gvNews.DataBind();                }                else                {                    //按内容搜索;                    gvNews.DataSource = new NewsManager().SelectByContent(key);                    gvNews.DataBind();                }            }        }


    错误总是提示说我的我从界面传递过来的key值为null, 可是为什么为空呢, 我的key值是从母板页中加载来的, 而设断点调试会发, 程序根本没有执行母板页的代码而是先执行的是内容页(search.aspx)!!! 如果我们不把serch.aspx设为起始页面的话 ,而是从主界面开始, 就不会出现上述的错误.  究其原因是顺序出了问题, 就像我们打热水时为了保护自己, 打水也是有顺序的, 而之所以出现了问题正是因为顺序的问题. 

    首相说说母板, 就是把每个页面相同的东西(框架)抽出来作为一个母板页, 后缀名为.master , 就像是我们的ppt中的母板, 像是提取公因式中的公因式一样, 在此就不再举例了. 还有嵌套母板也是可以这样理解的, 就相当于数学中又一次发现了公因式因子, 并且提取出来了 .  而本次的问题是我们在使用母板的过程中, 加载的机制如何呢, 经过百度发现母板页和它的内容页加载的事件顺序是不一致的:

    加载母版页和内容页共需要经过8个过程。这8个过程显示初始化和加载母版页及内容页是一个相互交叠的过程。基本过程是,初始化母版页和内容页控件树,然后,初始化母版页和内容页页面,接着,加载母版页和内容页,最后,加载母版页和内容页控件树。以上8个过程对应着11个具体事件。这些事件如下所示。

   (1)母版页中控件Init事件;


   (2)内容页中Content控件Init事件;


   (3)母版页Init事件;


   (4)内容页Init事件;


   (5)内容页Load事件;


   (6)母版页Load事件;


   (7)内容页中Content控件Load事件;


   (8)内容页PreRender事件;


   (9)母版页PreRender事件;


   (10)母版页控件PreRender事件。


   (11)内容页中Content控件PreRender事件。


     实际上,8个过程或者是11个事件都用于说明母版页和内容页中的具体事件顺序。内容页和母版页中会引发相同的事件。例如,两者都引发Init、Load和PreRender事件。引发事件的一般规律是,初始化Init事件从最里面的控件(母版页)向最外面的控件(Conetent控件及内容页)引发,所有其他事件则从最外面的控件向最里面的控件引发。需要牢记,母版页会合并到内容页中,并被视为内容页中的一个控件,这一点十分有用。

     所以我们必须注意以上事件顺序。 当在内容页中访问母版页的属性或者服务器控件时,如果按照过去的处理思路,可能会在内容页的Page_Load事件处理程序中加以实现。由前文的事件顺序可知,在母版页Load事件引发之前,内容页Load事件已经引发, 况且我们在母板中是通过点击按钮控件来执行key的传入的. 其实问题在于全局观上, 没有全局的把控, 就不知道调试的方向, 调试的方向错了, 就怎么也调试不出来..... 

    总之, 做事情的顺序也很重要吼~~~

原创粉丝点击