FineUI 官方论坛

标题: 【已解决,未指定ID】动态添加Accordion提示$b未定义 [打印本页]

作者: 嗨陽    时间: 2017-3-19 23:35
标题: 【已解决,未指定ID】动态添加Accordion提示$b未定义
view部分代码:
  1. F.Region()
  2.                 .ID("Region2")
  3.                 .RegionSplit(true)
  4.                 .Width(200)
  5.                 .ShowHeader(true)
  6.                 .Title("菜单")
  7.                 .EnableCollapse(true)
  8.                 .Layout(LayoutType.Fit)
  9.                 .RegionPosition(Position.Left)
  10.                 .Items(
  11.                     ViewBag.Accordion

  12.                 ),
复制代码
controller部分代码:
  1. private void LoadData()
  2.         {
  3.             var menu = authorizeBLL.GetModuleList(SystemInfo.CurrentUserId).ToList();
  4.             Accordion accordionMenu = new Accordion();

  5.             foreach (var m in menu.Where(w => w.ParentId == "0"))
  6.             {
  7.                 AccordionPane accordionPane = new AccordionPane();
  8.                 accordionPane.Title = m.FullName;
  9.                 accordionPane.ShowBorder = false;
  10.                 accordionPane.BodyPadding = "2px 0 0 0";
  11.                 accordionPane.IconUrl = m.Icon;
  12.                 accordionMenu.Panes.Add(accordionPane);
  13.             }
  14.             ViewBag.Accordion = accordionMenu;
  15.         }
复制代码
[attach]9932[/attach][attach]9933[/attach]

作者: sanshi    时间: 2017-3-19 23:50
请基于空项目重现问题,并上传
作者: 嗨陽    时间: 2017-3-20 00:06
sanshi 发表于 2017-3-19 23:50
请基于空项目重现问题,并上传

[attach]9934[/attach]
直接替换你的空项目里的Views/Home/Index 和Controllers/HomeController谢谢




作者: sanshi    时间: 2017-3-20 11:22

这个问题其实很简单,你的后台代码:
  1. private void LoadData()
  2. {
  3.         Accordion accordionMenu = new Accordion();

  4.         for (var i=0;i<3;i++)
  5.         {
  6.                 AccordionPane accordionPane = new AccordionPane();
  7.                 accordionPane.Title = "AccordionPane"+i.ToString();
  8.                 accordionPane.ShowBorder = false;
  9.                 accordionPane.BodyPadding = "2px 0 0 0";               
  10.                 accordionMenu.Panes.Add(accordionPane);
  11.         }
  12.    
  13.         ViewBag.Accordion = accordionMenu;
  14. }
复制代码


前台代码:
  1. F.ready(function () {

  2.             // 初始化主框架中的树和选项卡互动,以及地址栏的更新
  3.             // treeMenu: 主框架中的树控件实例,或者内嵌树控件的手风琴控件实例
  4.             // mainTabStrip: 选项卡实例
  5.             // updateHash: 切换Tab时,是否更新地址栏Hash值(默认值:true)
  6.             // refreshWhenExist: 添加选项卡时,如果选项卡已经存在,是否刷新内部IFrame(默认值:false)
  7.             // refreshWhenTabChange: 切换选项卡时,是否刷新内部IFrame(默认值:false)
  8.             // maxTabCount: 最大允许打开的选项卡数量
  9.             // maxTabMessage: 超过最大允许打开选项卡数量时的提示信息
  10.             F.initTreeTabStrip(F.ui.treeMenu, F.ui.mainTabStrip, {
  11.                 maxTabCount: 10,
  12.                 maxTabMessage: '请先关闭一些选项卡(最多允许打开 10 个)!'
  13.             });

  14.         });
复制代码


看到没,你前台调用 F.ui.treeMenu,但是后台未指定名为 treeMenu 的树控件 或者 包含树控件的Accordion控件。

把后台代码改为,就好了:
  1. private void LoadData()
  2. {
  3.         Accordion accordionMenu = new Accordion();
  4.         accordionMenu.ID = "treeMenu";
复制代码


效果:

[attach]9942[/attach]

作者: capfhz    时间: 2017-3-20 11:25
哈哈,这提示有亮点,提示$b未定义
作者: 嗨陽    时间: 2017-3-20 13:27
sanshi 发表于 2017-3-20 11:22
这个问题其实很简单,你的后台代码:

非常感谢!




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