FineUI 官方论坛

标题: 【已解决】F.GetControl 获取不到控件的问题 [打印本页]

作者: 直尺画圆    时间: 2017-7-27 16:17
标题: 【已解决】F.GetControl 获取不到控件的问题
@(F.Button()
                        .EnableDefaultCorner(false)
                        .EnableDefaultState(false)
                        .IconFont(IconFont.Bank)
                        .IconAlign(IconAlign.Top)
                        .Text("点击事件")
                        .ID("btnBuilder")
                        
                    )


Button btnBuilder= F.GetControl<Button>("btnBuilder");
在测试中,为啥获取不到btnBuilder的button控件呢?返回值为null下载的基础版实例也是一样的,获取不到控件,难道基础版不支持吗?只有收费版的才行?



作者: sanshi    时间: 2017-7-27 17:25
这个仅用于回发(并非获取到前台定义的那个控件,因为MVC是无状态的,和WebForms有本质的不同)
作者: 直尺画圆    时间: 2017-7-27 17:31
sanshi 发表于 2017-7-27 17:25
这个仅用于回发(并非获取到前台定义的那个控件,因为MVC是无状态的,和WebForms有本质的不同) ...

可是我下载的实例中,你是这样用的啊,就可以获取到值,我在基础版里获取不到所有控件,什么情况
@{
        string cookieMenuStyle = (string)ViewBag.CookieMenuStyle;
        string cookieMenuMode = (string)ViewBag.CookieMenuMode;
        string cookieLang = (string)ViewBag.CookieLang;
        string cookieSearchText = (string)ViewBag.CookieSearchText;
               
        // 初始化左侧菜单
        Tree treeMenu = F.GetControl<Tree>("treeMenu");
        Panel leftPanel = F.GetControl<Panel>("leftPanel");
        Panel topPanel = F.GetControl<Panel>("topPanel");
        Tool toolMaximize = F.GetControl<Tool>("toolMaximize");

        if (cookieMenuStyle == "tree" || cookieMenuStyle == "tree_minimode")
        {
            treeMenu.HideHScrollbar = true;
            treeMenu.HideVScrollbar = true;
            treeMenu.ExpanderToRight = true;
            treeMenu.HeaderStyle = true;

            if (cookieMenuStyle == "tree_minimode")
            {
                // 默认折叠模式时,折叠头部面板,并设置最大化图标
                topPanel.Expanded = false;
                toolMaximize.IconFont = IconFont.Compress;

                treeMenu.MiniMode = true;
                treeMenu.MiniModePopWidth = 300;

                leftPanel.Width = 50;
                leftPanel.CssClass = "minimodeinside leftregion bgpanel";
            }
        }

        // 初始化设置 - 菜单模式
        SetCheckedMenuItem(F.GetControl<MenuButton>("MenuMode"), cookieMenuMode);

        // 初始化设置 - 菜单样式
        SetCheckedMenuItem(F.GetControl<MenuButton>("MenuStyle"), cookieMenuStyle);

        // 初始化设置 - 语言
        SetCheckedMenuItem(F.GetControl<MenuButton>("MenuLang"), cookieLang);

        // 初始化搜索文本
        var ttbxSearch = F.GetControl<TwinTriggerBox>("ttbxSearch");
        if (!String.IsNullOrEmpty(cookieSearchText))
        {
            ttbxSearch.Text = cookieSearchText;
            ttbxSearch.ShowTrigger1 = true;
        }
作者: fengylm    时间: 2017-7-27 22:26
这些都是为了回发啊,你看看你自己标红的四个对象,所有的操作都是赋值,没任何取值的地方,所有代码执行完后会生成JS代码回发到前台
作者: 直尺画圆    时间: 2017-7-28 08:52
fengylm 发表于 2017-7-27 22:26
这些都是为了回发啊,你看看你自己标红的四个对象,所有的操作都是赋值,没任何取值的地方,所有代码执行完后会 ...

嗯,是啊,没有取值的地方,现在的问题,赋值都不成功啊,比如 Tree treeMenu = F.GetControl<Tree>("treeMenu"); 这一句,变量 treeMenu 执行后是null,你可以在空项目实例里写一下,跟踪一下看看啊,我试了,但在网站实例运行时,就可以显示出来 treeMenu 有赋值成功。
作者: 直尺画圆    时间: 2017-7-28 08:58
sanshi 发表于 2017-7-27 17:25
这个仅用于回发(并非获取到前台定义的那个控件,因为MVC是无状态的,和WebForms有本质的不同) ...

三石兄呢,麻烦看一下啊,在空项目实例里,index.cshtml这样写,确实赋值不成功,Tree treeMenu = F.GetControl<Tree>("treeMenu");   调试跟踪 treeMenu结果为null
作者: sanshi    时间: 2017-7-28 10:17
直尺画圆 发表于 2017-7-27 17:31
可是我下载的实例中,你是这样用的啊,就可以获取到值,我在基础版里获取不到所有控件,什么情况
@{
      ...

你给的代码就是FineUIMvc在线示例(基础版)里的代码,怎么会不行。

基于空项目重现问题,并上传
作者: 直尺画圆    时间: 2017-7-28 10:48
sanshi 发表于 2017-7-28 10:17
你给的代码就是FineUIMvc在线示例(基础版)里的代码,怎么会不行。

基于空项目重现问题,并上传 ...

错误实例文件较大,上传不了,我上传到百度盘里,点下面下载,请三石兄看一下问题在哪,谢谢!
下载地址:
http://pan.baidu.com/s/1nuLHBVN

作者: sanshi    时间: 2017-7-28 11:19
答案其实很简单,执行顺序的问题。既然官网在线示例是好的,对比下两者的代码也能发现问题。

官网示例:

  1. @section body {
  2.        
  3.         ...
  4.        
  5.         @{
  6.                 Tree treeMenu = F.GetControl<Tree>("treeMenu");
  7.                
  8.                
  9.         }

  10. }
复制代码


你的代码:

  1. @section body {
  2.        
  3.         ...
  4.        
  5.        

  6. }

  7. @{
  8.         Tree treeMenu = F.GetControl<Tree>("treeMenu");
  9.        
  10.        
  11. }
复制代码


其实你调试下,也能发现问题:

1. 先执行这个:
[attach]10396[/attach]

2. 再执行这里
[attach]10397[/attach]


直接解决方案,也是呼之欲出了吧。


作者: 直尺画圆    时间: 2017-7-28 11:34
sanshi 发表于 2017-7-28 11:19
答案其实很简单,执行顺序的问题。既然官网在线示例是好的,对比下两者的代码也能发现问题。

官网示例:

谢谢啊,确实如此,刚开始接触MVC,难免碰壁,问题已解决。




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