今天在弄搜索界面与后台连接显示这块出现了如下的错误:
这样的错误首先是从后台来去找,发现后台没有任何的错误, 就是前台的问题了, 前台界面实在是找不出来就和牛腩的源码进行了对比, 对不的结果是没有错误的, 但是我直接运行搜索框这个页面就是不行. 后来想到的母板页面的错误, 母板中的代码:
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();
}
}
}
首相说说母板, 就是把每个页面相同的东西(框架)抽出来作为一个母板页, 后缀名为.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的传入的. 其实问题在于全局观上, 没有全局的把控, 就不知道调试的方向, 调试的方向错了, 就怎么也调试不出来.....
总之, 做事情的顺序也很重要吼~~~