• 理解ParseChildren用法


    我们知道,在开发ASP.NET 服务器控件时,ParseChildrenAttribute 类指示页分析器应如何处理页上声明的服务器控件标记中嵌套的内容,下边我引用MSDN的解释,然后用实例对其进行进一步的说明。

    ParseChildrenAttribute 类允许您以 ParseChildrenAttribute 元数据属性标记服务器控件来为自定义服务器控件指定分析逻辑。

    以元数据属性 (Attribute) ParseChildren(true) 标记服务器控件将指示分析器把包含在服务器控件标记内的元素解释为属性 (Property)。在这种情况下,ChildrenAsProperties 属性为 true。

    以元数据属性 (Attribute) ParseChildren(true,"<Default Property>") 标记服务器控件将把 DefaultProperty 属性 (Property) 设置为传递到该属性 (Attribute) 的属性 (Property) 名称。

    以元数据属性 ParseChildren(false)(默认值)标记服务器控件将指示分析器把包含在服务器控件标记中的元素解释为将通过关联的 ControlBuilder 进行分析的内容,即解释为控件。在这种情况下,ChildrenAsProperties 属性为 false。

    如果我们仅仅看上面的解释,我相信大家都很郁闷。

    针对ParseChildren(true,"<Default Property>") 这种情况,MSDN给出了一个例子:
    http://msdn.microsoft.com/zh-cn/library/system.web.ui.parsechildrenattribute(VS.80).aspx

    其中这段html

    Code

     产生的临时代码如下(我做了一些整理,和实际的文件会有出入):

    Code

     可以看出,在应用了[ParseChildren(true, "Employees")]元数据属性,产生的Employee对象加入到一个ArrayList对象中,这个ArrayList对象又赋值给CollectionPropertyControl的Employees属性。

    那么针对ParseChildren(false)这种情况,要实现同样的效果,我们应该怎么办呢?
    MSDN告诉我们,这种情况由ControlBuilder来处理,我对MSDN提供的类文件做了一些修改:

    Code

    对比两个类,可以看出,我添加了一个类MyControlBuilder,同时对CollectionPropertyControl应用了属性[ControlBuilderAttribute(typeof(MyControlBuilder))],同时,在CollectionPropertyControl类中我们重写了AddParsedSubObject方法
    上边的那段html,产生的临时代码如下:
    Code

     可以看出,在应用了[ParseChildren(false]元数据属性,产生的Employee对象加入到CollectionPropertyControl的Controls集合中。在这个过程中,代码会分析添加进来的Control是否是Employee类型,如果是则添加到employees(ArrayList类型)集合中,我们重写AddParsedSubObject方法的目的就在于此。
  • 相关阅读:
    python自定义编写有关用户登录注册程序代码
    项目经理多年的经验之谈
    Linux虚拟机克隆后,启动系统发现网卡无法启动
    mysql出现服务器异常后,重启服务器后无法开启数据库处理方法
    计算机毕业四年,我都做了什么?
    个人Blog(采用Django+uwsgi+nginx)里面包含很多技术文章
    Delphi to C# Equivalancesdelphi和C#类似的地方
    Javascript浏览器关于scrollLeft,scrollTop的兼容性
    Mozilla Firefox15怎么样才能把标签页弄到下面去,就和360的一样,Mozilla Firefox15没有取消标签置顶这个选项……
    Delphi过程函数传递参数的几种方式
  • 原文地址:https://www.cnblogs.com/fengfeng/p/1251495.html
Copyright © 2020-2023  润新知