FineUI 官方论坛

标题: 求助帖 fineui 二级菜单包含三级菜单时 二级菜单链接的... [打印本页]

作者: bigchen    时间: 2014-4-14 09:44
标题: 求助帖 fineui 二级菜单包含三级菜单时 二级菜单链接的...
当二级菜单不包含三级菜单时 ,二级菜单就可以正常在tab页里打开 ,当二级菜单包含三级菜单时,二级菜单的链接就会刷新当前整个页面  然后跳转到目标页。现在要的是也能在tab页里展示 ,我使用的是appbox4.0的基础上进行编码的!

作者: Min    时间: 2014-4-14 10:17
只能说你递归里 是否包含  框架关联。。 贴代码 看看
作者: bigchen    时间: 2014-4-14 13:04
Min 发表于 2014-4-14 10:17
只能说你递归里 是否包含  框架关联。。 贴代码 看看

这是全部的main.aspx下的内容
   private Accordion InitAccordionMenu(List<Menu> menus)
        {
            Accordion accordionMenu = new Accordion();
            accordionMenu.ID = "accordionMenu";
            accordionMenu.EnableFill = true;
            accordionMenu.ShowBorder = false;
            accordionMenu.ShowHeader = false;
            leftRegion.Items.Add(accordionMenu);


            foreach (var menu in menus.Where(m => m.Parent == null))
            {
                AccordionPane accordionPane = new AccordionPane();
                accordionPane.Title = menu.Name;
                accordionPane.Layout = Layout.Fit;
                accordionPane.ShowBorder = false;
                accordionPane.BodyPadding = "2px 0 0 0";
                accordionMenu.Items.Add(accordionPane);

                Tree innerTree = new Tree();
                innerTree.EnableArrows = true;
                innerTree.ShowBorder = false;
                innerTree.ShowHeader = false;
                innerTree.EnableIcons = false;
                innerTree.AutoScroll = true;
                accordionPane.Items.Add(innerTree);


                // 生成树
                ResolveMenuTree(menus, menu, innerTree.Nodes);

            }

            return accordionMenu;
        }


        /// <summary>
        /// 生成菜单树
        /// </summary>
        /// <param name="menus"></param>
        /// <param name="parentMenuId"></param>
        /// <param name="nodes"></param>
        private int ResolveMenuTree(List<Menu> menus, Menu parentMenu, FineUI.TreeNodeCollection nodes)
        {
            int count = 0;
            foreach (var menu in menus.Where(m => m.Parent == parentMenu))
            {
                FineUI.TreeNode node = new FineUI.TreeNode();
                nodes.Add(node);
                count++;
                node.Text = menu.Name;              
                node.IconUrl = menu.ImageUrl;
                node.Expanded = true;
                if (!String.IsNullOrEmpty(menu.NavigateUrl))
                {
                    if(menu.Style==0)
                    {
                        node.EnablePostBack = false;
                        node.NavigateUrl = ResolveUrl(menu.NavigateUrl);
                        
                    }
                    else
                    {
                        node.Target = "Self";                       
                        node.AutoPostBack = false;                                       
                        node.OnClientClick = Window1.GetShowReference(menu.NavigateUrl, node.Text, 600, 400);  
                       
                       
                    }
                    
                    //node.OnClientClick=Window1.GetShowReference(ResolveUrl(menu.NavigateUrl),node.Text,600,400);
                    //node.OnClientClick = String.Format("addExampleTab('{0}','{1}','{2}')", node.NodeID, ResolveUrl(menu.NavigateUrl), node.Text.Replace("'", ""));
                }

                if (menu.IsTreeLeaf)
                {
                    node.Leaf = true;

                    // 如果是叶子节点,但是不是超链接,则是空目录,删除
                    if (String.IsNullOrEmpty(menu.NavigateUrl))
                    {
                        nodes.Remove(node);
                        count--;
                    }
                }
                else
                {
                    //node.SingleClickExpand = true;

                    int childCount = ResolveMenuTree(menus, menu, node.Nodes);

                    // 如果是目录,但是计算的子节点数为0,可能目录里面的都是空目录,则要删除此父目录
                    if (childCount == 0 && String.IsNullOrEmpty(menu.NavigateUrl))
                    {
                        nodes.Remove(node);
                        count--;
                    }
                }

            }

            return count;
        }
        #endregion


        #region InitTreeMenu

        /// <summary>
        /// 创建树菜单
        /// </summary>
        /// <param name="menus"></param>
        /// <returns></returns>
        private Tree InitTreeMenu(List<Menu> menus)
        {
            Tree treeMenu = new Tree();
            treeMenu.ID = "treeMenu";
            treeMenu.EnableArrows = true;
            treeMenu.ShowBorder = false;
            treeMenu.ShowHeader = false;
            treeMenu.EnableIcons = false;
            treeMenu.AutoScroll = true;
            leftRegion.Items.Add(treeMenu);

            // 生成树
            ResolveMenuTree(menus, null, treeMenu.Nodes);

            // 展开第一个树节点
            treeMenu.Nodes[0].Expanded = true;

            return treeMenu;
        }

作者: Min    时间: 2014-4-14 13:46
你需要注册客户端脚本,服务器端控件ID和客户端ID的映射关系,
作者: bigchen    时间: 2014-4-14 15:50
Min 发表于 2014-4-14 13:46
你需要注册客户端脚本,服务器端控件ID和客户端ID的映射关系,

都是有的
protected void Page_Init(object sender, EventArgs e)
        {

            string menuType = "menu";
            HttpCookie menuCookie = Request.Cookies["MenuStyle_v4"];
            if (menuCookie != null)
            {
                menuType = menuCookie.Value;
            }

            // 工具栏上的帮助菜单
            JArray ja = JArray.Parse("[{\'Text\':\'万年历\',\'Icon\':\'Calendar\',\'ID\':\'wannianli\',\'URL\':\'~/help/wannianli.htm\'},{\'Text\':\'科学计算器\',\'Icon\':\'Calculator\',\'ID\':\'jisuanqi\',\'URL\':\'~/help/jisuanqi.htm\'},{\'Text\':\'系统帮助\',\'Icon\':\'Help\',\'ID\':\'help\',\'URL\':\'~/help/help.htm\'}]");
            foreach (JObject jo in ja)
            {
                MenuButton menuItem = new MenuButton();
                menuItem.EnablePostBack = false;
                menuItem.Text = jo.Value<string>("Text");
                menuItem.Icon = IconHelper.String2Icon(jo.Value<string>("Icon"), true);
                menuItem.OnClientClick = String.Format("addExampleTab('{0}','{1}','{2}')", jo.Value<string>("ID"), ResolveUrl(jo.Value<string>("URL")), jo.Value<string>("Text"));

                btnHelp.Menu.Items.Add(menuItem);
            }
            // 用户可见的菜单列表
            List<Menu> menus = ResolveUserMenuList();
            if (menus.Count == 0)
            {
                Response.Write("系统管理员尚未给你配置菜单!");
                Response.End();

                return;
            }


            // 注册客户端脚本,服务器端控件ID和客户端ID的映射关系
            JObject ids = GetClientIDS(btnExpandAll, btnCollapseAll, mainTabStrip, leftRegion, menuSettings, btnRefreshTxt, txtUser,
                txtOnlineUserCount, txtCurrentTime);
            ids.Add("userName", GetIdentityName());
            ids.Add("userIP", Request.UserHostAddress);
            ids.Add("onlineUserCount", GetOnlineCount());
            //ids.Add("theme", PageManager.Instance.Theme.ToString());
            if (menuType == "accordion")
            {
                Accordion accordionMenu = InitAccordionMenu(menus);
                ids.Add("mainMenu", accordionMenu.ClientID);
                ids.Add("menuType", "accordion");
            }
            else
            {
                Tree treeMenu = InitTreeMenu(menus);
                ids.Add("mainMenu", treeMenu.ClientID);
                ids.Add("menuType", "menu");
            }



            // 只在页面第一次加载时注册客户端用到的脚本
            if (!Page.IsPostBack)
            {
                string idsScriptStr = String.Format("window.IDS={0};", ids.ToString(Newtonsoft.Json.Formatting.None));
                PageContext.RegisterStartupScript(idsScriptStr);
            }


        }

        #endregion




欢迎光临 FineUI 官方论坛 (https://fineui.com/BBS/) Powered by Discuz! X3.4