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的事件流程和页面正常加载不一致。当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>

时间: 2024-09-15 21:10:15

DynamicControl/DynamicField 例外的解决的相关文章

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 具体发生原因暂

艾伟: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   具体发生原

Windows 2008 r2 防火墙设置端口例外的方法_win服务器

最近入手了win2008 r2的服务器,使用发现,确实比2003性能得到大量提升尤其对于高配置的机器,安全性也加强了,设置更专业,推荐大家以后都使用2008 r2的,32位与64位的软件安装无压力. 防火墙开启可以有效防止外部非法访问,能够很好的保护内网电脑.可是开启防火墙之后,很多应用服务内外网访问都有限制,那么可以通过设置防火墙端口排除例外来解决这个问题,本经验以win2008R2系统截图为例 方法/步骤 1.Windows2008R2系统防火墙在,控制面板里面去找(还可以到服务器管理器里面

详解第三次商标法修改三大看点

"这是一次'问题回应式'的立法进程."正在昆明举行的"2012中国商标年会"上,国务院法制办教科文卫司司长张建华详细阐述了目前正在进行的第三次商标法修改的主要内容.张建华说,商标法自颁布实施以来已进行过两次修改,但目前仍有一些内容不能适应改革开放和经济发展的需要.针对当前社会反映比较突出的三类问题,商标法第三次修改均给予积极回应:一是进一步方便申请人注册,二是进一步维护公平竞争的市场秩序,三是进一步加大对商标侵权的处罚力度.商标注册申请进一步便捷长期以来,商标注册申

CCAI 2017 | 专访德国语言技术领军者 Hans Uszkoreit:深度学习还不足以解决 NLP 核心问题

会前,我们采访到了大会 Keynote 嘉宾.德国人工智能研究中心科技总监 Hans Uszkoreit 博士. Uszkoreit 博士是中德两国人工智能合作的核心人物,负责德国人工智能研究中心在中国的所有合作项目,今年 3 月,他刚被任命为在北京新成立的人工智能技术中心(AITC)总监兼首席科学家.在访谈中,Uszkoreit 博士谈到了人工智能在工业 4.0 和商业智能上的应用,以及中.美.欧在人工智能领域的差异. 对于他的老本行,Uszkoreit 博士认为,语言技术是人工智能的核心部分

国外空间乱码显示问题的解决

解决|问题|显示 好不容易找到了一个免费的空间,可是把网页放上去一看一些乱码,是不是很上火呢?不过看了这篇文章之后就不用上火了,我们有解决办法!     在数据提取页面的第一行代码换成如下代码即可:     <% @language=vbscript codepage=936%>     1.若是html文件(.htm .html):     在<head></head>中加上<meta http-equiv="Content-Type" co

JavaScript高级应用:例外处理

javascript|高级 程序开发中,编程人员经常要面对的是如何编写代码来响应错误事件的发生,即例外处理(exception handlers).如果例外处理代码设计得周全,那么最终呈现给用户的就将是一个友好的界面.否则,就会让访问者对莫名的现象感到真正的"意外".本文就将为你介绍Web开发中JavaScript语言的例外处理技术. 一.什么是例外处理 当JavaScript程序在运行中发生了诸如数组索引越界.类型不匹配或者语法错误时,JavaScript解释器就会引发例外处理.EC

最新方案:国外空间乱码显示问题的解决

解决|问题|显示 在数据提取页面的第一行代码换成如下代码即可: <% @language=vbscript codepage=936%> 1.若是html文件(.htm .html) 在<head></head>中加上<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 2.若是PHP/cgi文件(.php .php3 .php4) 在

困扰JSP的一些问题与解决方法

js|解决|问题 如今每一个使用servlets的开发者都知道JSP,一种由Sun公司发明并花费大量精力加以推行并建构在servlet技术之上的web技术.JSP将servlet中的html代码脱离了出来,从而可以加速web应用开发和页面维护.实际上,由Sun发布的官方"应用开发模型"文档上说得更远: "JSP技术应该被视为标准,而servlets在多数情况下可视为一种补充." ( Section 1.9, 1999/12/15听取意见版 ). 本文的目的在于听取对