FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 4903|回复: 9
打印 上一主题 下一主题

【已解决】F.GetControl 获取不到控件的问题

[复制链接]
跳转到指定楼层
楼主
发表于 2017-7-27 16:17:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
@(F.Button()
                        .EnableDefaultCorner(false)
                        .EnableDefaultState(false)
                        .IconFont(IconFont.Bank)
                        .IconAlign(IconAlign.Top)
                        .Text("点击事件")
                        .ID("btnBuilder")
                        
                    )


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


推荐
发表于 2017-7-28 11:19:47 | 只看该作者
答案其实很简单,执行顺序的问题。既然官网在线示例是好的,对比下两者的代码也能发现问题。

官网示例:

  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. 先执行这个:


2. 再执行这里



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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
沙发
发表于 2017-7-27 17:25:36 | 只看该作者
这个仅用于回发(并非获取到前台定义的那个控件,因为MVC是无状态的,和WebForms有本质的不同)
板凳
 楼主| 发表于 2017-7-27 17:31:26 | 只看该作者
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;
        }
地板
发表于 2017-7-27 22:26:00 | 只看该作者
这些都是为了回发啊,你看看你自己标红的四个对象,所有的操作都是赋值,没任何取值的地方,所有代码执行完后会生成JS代码回发到前台
5#
 楼主| 发表于 2017-7-28 08:52:41 | 只看该作者
fengylm 发表于 2017-7-27 22:26
这些都是为了回发啊,你看看你自己标红的四个对象,所有的操作都是赋值,没任何取值的地方,所有代码执行完后会 ...

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

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

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

基于空项目重现问题,并上传
8#
 楼主| 发表于 2017-7-28 10:48:29 | 只看该作者
sanshi 发表于 2017-7-28 10:17
你给的代码就是FineUIMvc在线示例(基础版)里的代码,怎么会不行。

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

错误实例文件较大,上传不了,我上传到百度盘里,点下面下载,请三石兄看一下问题在哪,谢谢!
下载地址:
http://pan.baidu.com/s/1nuLHBVN
10#
 楼主| 发表于 2017-7-28 11:34:42 | 只看该作者
sanshi 发表于 2017-7-28 11:19
答案其实很简单,执行顺序的问题。既然官网在线示例是好的,对比下两者的代码也能发现问题。

官网示例:

谢谢啊,确实如此,刚开始接触MVC,难免碰壁,问题已解决。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-4-20 11:30 , Processed in 0.050484 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表