问题描述:
页面的导航栏和菜单分别用两个用户控件admin_nav.ascx+admin_menu.ascx实现,分别从数据库中取出对应的数据
在admin_nav.ascx的code中获取NAVID并写入Cookies("NAVID")
this.Response.Cookies["NAVID"].Value = this.Request.QueryString["NAVID"].ToString();
然后在admin_menu.ascx中读取Cookies("NAVID"),读出菜单项问题发生在点击导航栏某项的时候,读出的菜单总是上一次写入的导航栏项下的菜单项,必须二次点击才能显示正确的菜单项,这该如何解决?

解决方案 »

  1.   

    这是admin_nav.ascx的代码
    string navID = string.Empty;
            protected void Page_Load(object sender, EventArgs e)
            {
                if(!this.Page.IsPostBack)
                {
                    bindNav();
                    if (this.Request.QueryString["NAVID"] != null && this.Request.QueryString["NAVID"].ToString() != "")
                    {
                        this.Response.Cookies["NAVID"].Value = this.Request.QueryString["NAVID"].ToString();
                    }
                }
            }
            private void bindNav()
            {
                DataSet dbds = null;
                dbds = WebDAO.getNavByDataSet();
                DataView dvnav = dbds.Tables[0].DefaultView;
                this.rptNav.DataSource = dvnav;
                this.rptNav.DataBind();
            }
    这是admin_menu.ascx的代码
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!this.Page.IsPostBack)
                {
                    bindmenu();
                }
            }        private void bindmenu()
            {
                string navID = string.Empty;            if (this.Request.Cookies["NAVID"] != null && this.Request.Cookies["NAVID"].ToString() != "")
                {
                    navID = this.Request.Cookies["NAVID"].Value.ToString();
                    DataSet dbds = null;
                    dbds = WebDAO.getMenuByDataSet(navID);
                    DataView dvnav = dbds.Tables[0].DefaultView;
                    this.rptMenu.DataSource = dvnav;
                    this.rptMenu.DataBind();
                }
                else
                {
                    DataSet dbds = null;
                    dbds = WebDAO.GetDefaultMenu();
                    DataView dvnav = dbds.Tables[0].DefaultView;
                    this.rptMenu.DataSource = dvnav;
                    this.rptMenu.DataBind();
                }
            }然后把两个用户控件插入到母版页admin.master中
      

  2.   

    cookies要回调一次以后能可以客户端得到!!
      

  3.   

    cookies不象session即时保存,即时就可以得到的!!一定要页面回调一次以后才可以取cookies上一次保存的值
      

  4.   

    请问,jrl5365,我该怎么解决?
      

  5.   

    给控件加一个pulic属性,通过它来传递参数
      

  6.   

    基于cookies该怎么解决?
    加public属性需要每个页面去写入属性值
      

  7.   

    你要确保得到Cookie的ascx后执行,你测试了吗??
    this.Response.Cookies["NAVID"].Value 这种写法不是好方法