艾伟:DynamicControl/DynamicField 例外的解决

简介:   在使用 DynamicField / DynamicControl 时,经常在PostBack时,会出现一个例外:  The DynamicControl/DynamicField needs to exist inside a data control that is bound to a data source that supports Dynamic Data.  中文为:  绑定到支持动态数据的数据源的数据控件内必须存在 DynamicControl/DynamicField    具体发生原因暂时不太清楚,估计是PostBack的事件流程和页面正常加载不一致。

  在使用 DynamicField / DynamicControl 时,经常在PostBack时,会出现一个例外:

  The DynamicControl/DynamicField needs to exist inside a data control that is bound to a data source that supports Dynamic Data.

  中文为:

  绑定到支持动态数据的数据源的数据控件内必须存在 DynamicControl/DynamicField

 

  具体发生原因暂时不太清楚,估计是PostBack的事件流程和页面正常加载不一致。当PostBack后,数据控件(如DetailsView, GridView, ListView 等)在状态加载时, 会把所有的 Fileds或Columns初始化一次,而这一次,由于数据源没有绑定,所以找不到相关的 MetaTable。在这种情况下,DynamicControl 和 DynamicField 都是丢出上述的例外。

  不过,从应用上来看,如果数据绑定做的合理的话(比如在InitComplete以前绑定),是不会出现这个问题的。但是一旦出了这个问题,解决起来就比较麻烦了,因为常常有些人习惯于在Load中绑定数据,要修改的话,常常会牵连一大堆的代码。希望对这个问题比较了解的朋友多多指教。

  目前我采用的方法,可以不改变原有的绑定流程,可以跟以前的Eval、Bind等一样使用,可以让大家试试。在使用中如有发现有Bug,请发邮件告诉我。因为我最近几个月都在应用 DynamicFieldTemplates 来开发应用程序,对这些问题比较关心。

  使用这种方法,可以让一些程序经验不足的人,也能避开这个错误。

  我分别从DynamicControl 和 DynamicField 继承了新的类 DdControl 和 DdField,然后在初始化时,判断是否存在MetaTable,如果不存在,则不再初始化。然后,程序中原本所有采用 DynamicControl/DynamicField的地方,都换成DdControl/DdField。

  DdControl/DdField的源码如下:

namespace  Common
{
    
public   class  DdField : DynamicField
    {
        
public   override   void  InitializeCell(System.Web.UI.WebControls.DataControlFie
ldCell cell, System.Web.UI.WebControls.DataControlCellType cellType, System.
Web.UI.WebControls.DataControlRowState rowState, 
int  rowIndex)
        {
            
//  HACK: Fix bug for: The DynamicControl/DynamicField needs to exist inside a data control that is bound to a data source
that supports Dynamic Data.

             if  ( base .Control.FindMetaTable()  ==   null )
                
return ;

            
base .InitializeCell(cell, cellType, rowState, rowIndex);
        }

    }
}

 

namespace  Common
{
    
public   class  DdControl : DynamicControl
    {
        
protected   override   void  OnInit(EventArgs e)
        {
            
//  HACK: Fix bug for: The DynamicControl/DynamicField needs to exist inside a data control that is bound to a data source
that supports Dynamic Data.

             if  ( this .FindMetaTable()  !=   null )
                
base .OnInit(e);
        }
    }
}

 

  使用时,只要在web.config中配置好前缀,就可以直接使用了。如:


< add  tagPrefix ="asp"  namespace ="Common"  assembly ="Common" />

 

< DetailsView >
  
< Fields >
    
< asp:DdField DataField = " Name "   />
   
  
Fields>
DetailsView>

 

目录
相关文章
|
3月前
|
自然语言处理 Linux API
Linux man命令英文天书?别怕,揭秘一招,让你瞬间解锁中文秘籍,轻松驾驭Linux命令海洋!
【8月更文挑战第22天】Linux以其开源特性、强大功能和灵活性深受技术爱好者喜爱。但对于新手而言,面对系统中众多命令及其英文man页面常感吃力。本文介绍如何将man命令内容转化为中文,降低学习门槛。首先强调man命令的重要性——它是获取Linux命令帮助的核心工具。接着,提出一种利用ccze工具结合在线翻译服务的方法,尽管需要额外处理,但对于寻求即时中文帮助的用户仍具价值。最后推荐使用tldr这样的工具,它提供简化的多语言man页面,方便快捷地查看中文命令说明,使学习过程更加顺畅。
44 1
|
3月前
|
缓存 网络协议 Linux
网工,这10条常用命令,没用过3条的,算我输!
网工,这10条常用命令,没用过3条的,算我输!
|
3月前
|
Linux Shell 数据库
【绝技大公开】Linux文件查找新招式:打破常规,探索那些鲜为人知的技巧,让你成为真正的文件追踪大师!
【8月更文挑战第13天】文件查找是Linux用户必备技能,能大幅提升工作效率。本文介绍几种高效查找方法,包括使用`column`美化`find`输出、利用`locate`和`mlocate`快速搜索、编写脚本自动化任务、采用`fd`现代工具提升查找体验,以及结合`grep`和`rg`搜索文件内容。此外,还推荐了`Gnome Search Tool`和`Albert`等图形界面工具,为用户提供多样选择。掌握这些技巧,让你的工作更加得心应手。
47 2
|
人工智能 人机交互 Windows
计算机中那些事儿(三):我与Dos的不解情缘---初识篇
计算机中那些事儿(三):我与Dos的不解情缘---初识篇
|
6月前
|
缓存 网络协议 安全
你以为键入网址后只是等待吗?惊!原来网页显示背后隐藏着这些奇妙步骤(终章)
这篇文章简要介绍了计算机网络中交换机和路由器的工作原理,以及它们在网络通信和连接中的重要作用。交换机利用MAC地址表实现数据包的转发,而路由器则根据IP地址进行转发决策,将数据包从一个网络转发到另一个网络。通过交换机和路由器的协同工作,网络实现了高效的数据传输和通信。
|
6月前
|
移动开发 JavaScript C#
分享53戏源代码总有一个是你想要的(亲测每一个均可用)
分享53戏源代码总有一个是你想要的(亲测每一个均可用)
107 0
|
Windows
谈一谈|电脑(Windows系统)隐藏神技
谈一谈|电脑(Windows系统)隐藏神技
124 0
|
Python
上古代码漫游记(二):把陷阱去掉了,反倒踩进了新的陷阱?
上古代码漫游记(二):把陷阱去掉了,反倒踩进了新的陷阱?
106 0
|
监控 Unix Linux
8 个出没在 Linux 终端的诡异家伙
这篇文章,我们一起来到 Linux 的诡异的一面…… 你知道吗?在我们日常使用的 Unix(和 Linux )及其各种各样的分支系统中,存在着一些诡异的命令或进程,它们让人毛骨悚然,有些确实是有害,但也有些却是有益的。下面就来简单介绍一下这些家伙吧。
124 0
8 个出没在 Linux 终端的诡异家伙
|
测试技术 C#
艾伟_转载:对于C#中b=a的N种情况分析
  本文旨在验证一个容易混淆的概念,从而为《玩转WPF/Silverlight中INotifyPropertyChanged和ObservableCollection》做铺垫。   两个相同类型的变量a和b,并且有如下关系:        b = a;   如果a发生改变,b是否也发生改变呢?    情况很复杂,分以下几种情况谈论:       1) 单个实体             1.
792 0