知识大全 控件开发asp.net处理标签间内容

Posted 属性

篇首语:学习如赶路,不能慢一步。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 控件开发asp.net处理标签间内容相关的知识,希望对你有一定的参考价值。

  控件标签间的内容有的时候处理成节点有的时候处理成子控件 如 间的节点就会处理成属性Text的值 而如Panel这样的控件则就是将其处理成子控件 首先看如何处理成属性的

  一 处理成为属性

  对于控件标签间的内容我们可以通过类System Web UI ParseChildrenAttribute类控制控件对其内容的解析行为

  ParseChildrenAttribute是一个类级别的属性标识 有四个构造函数

   ParseChildrenAttribute() ChildrenAsProperties属性设置为false 就是不解析成控件 ParseChildrenAttribute(Boolean) 指定解析成控件属性 ParseChildrenAttribute(Type) 控件标签中的内容解析成控件Type类型的控件 ParseChildrenAttribute(Boolean String)指定ChildrenAsProperties的值 同时指定默认解析的属性(DefaultProperty)

  默认情况下 Control将内容解析成子控件 而WebControl因为可以标识了[ParseChildren(true Text )] 所以默认解析为属性 对于简单的属性如TextBox 只需要表示为[ParseChildren(true Text ) DefaultProperty( Text )]即可 而对于DropDownList控件的Items属性 如果只是标识了[ParseChildren(true Item ) DefaultProperty( Items )] 那么Items内部如何解析呢?所以肯定要告诉属性对应的解析方式

  System Web UI PersistenceModeAttribute用于控制控件属性的保存方式 接收的参数为PersistenceMode枚举的值 共四种类型

  ◆Attribute:指定属性 (Property) 或事件保持为属性 (Attribute);◆EncodedInnerDefaultProperty:指定属性作为 ASP NET 服务器控件的唯一内部文本而进行保持 属性值是 HTML 编码的 只能对字符串做这种指定;◆InnerDefaultProperty:指定属性在 ASP NET 服务器控件中保持为内部文本 还指示将该属性定义为元素的默认属性 只能指定一个属性为默认属性;◆InnerProperty:指定属性在 ASP NET 服务器控件中保持为嵌套标记 这通常用于复杂对象 它们具有自己的持久性属性

  所以我们可以看到DropDownList的Items属性上的标识为:[PersistenceMode(PersistenceMode InnerProperty)] 然后在ListItem的Text属性上标识为[PersistenceMode[PersistenceMode EncodedInnerDefaultProperty]] 解释下 因为Items属性为复杂属性 存在标签的嵌套 所以我们可以肯定的是标识类型为InnerProperty 而Text作为Items的属性 也是默认文本中的内容为Text所以标识为EncodedInnerDefaultProperty

  二 处理为子控件

  上面介绍了处理为属性的一些大体的方法 而有的时候我们需要将Tag中的节点处理为子控件 比如 Control控件 一般我们将标签中的内容解析成子控件有两中方法 使用Control AddParseSubObjec()方法 通过构建新的ControlBuilder类别

  AddParseSubObject()在子对象已经被分析出来之后才调用 通知服务器控件某个元素(XML 或 HTML)已经过语法分析 并将该元素添加到服务器控件的 ControlCollection 对象

  但是如果我们要在没有加载时就进行一些分析只是依靠AddParseSubObjec()是不行的 如 我们要在分析出来之前剔除一些非法的字符串 就不行了 所以我们可以创建自己的ControlBuilder类来实现 只需要我们自己的ControlBuilder类继承于ControlBuilder类即可准确的解析

  示例

  // Custom ControlBuilder class Interprets nested tag name myitem as a textbox public class MyControlBuilder : ControlBuilder public override Type GetChildControlType(String tagName IDictionary attributes)if (String Compare(tagName myitem true) == ) return typeof(TextBox);return null;

  [ ControlBuilderAttribute(typeof(MyControlBuilder)) ]public class MyControl : Control// Store all the controls specified as nested tags private ArrayList items = new ArrayList();

  // This function is internally invoked by IParserAccessor AddParsedSubObject(Object) protected override void AddParsedSubObject(Object obj) if (obj is TextBox) items Add(obj);

  // Override CreateChildControls protected override void CreateChildControls()System Collections IEnumerator myEnumerator = items GetEnumerator();while(myEnumerator MoveNext())this Controls Add((TextBox)myEnumerator Current);   

cha138/Article/program/net/201311/13653

相关参考

知识大全 asp.net控件开发(一)-显示控件内容

  控件的显示自然会离不开输出HTMLCSSJavascript等前台的显示内容所以开发一个控件的时候第一件事就是要知道如何输出客户端要显示的内容  一选择基类  中所有的标准控件都可以拿过来作为基类

知识大全 asp.net 控件开发(一)显示控件内容

  控件的显示自然会离不开输出cssjavascript等前台的显示内容所以开发一个控件的时候第一件事就是要知道如何输出客户端要显示的内容一选择基类    &n

知识大全 Asp.net控件开发----控件开发基础

Asp.net控件开发----控件开发基础  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  服务器

知识大全 Asp.net 控件开发—数据回传

Asp.net控件开发—数据回传  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  准备技术  常规

知识大全 ASP.NET模板控件开发浅析

ASP.NET模板控件开发浅析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ASPNET模板控

知识大全 分析ASP.NET服务器控件开发-控件生命周期

分析ASP.NET服务器控件开发-控件生命周期  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb

知识大全 Asp.net 2.0 自定义控件开发

Asp.net2.0自定义控件开发  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  (一)概述  

知识大全 ASP.NET 2.0移动开发之列表控件

ASP.NET2.0移动开发之列表控件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!概述  在很多

知识大全 ASP.NET 2.0服务器控件开发精要

ASP.NET2.0服务器控件开发精要  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  利用ASP

知识大全 ASP.NET项目开发指南:界面控件设计(1)

ASP.NET项目开发指南:界面控件设计(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &