C# 在自定义ASP.NET控件中应如何使用IParserAccessor接口

C# 在自定义ASP.NET控件中应如何使用IParserAccessor接口,c#,asp.net,custom-controls,C#,Asp.net,Custom Controls,我正在尝试在C#,ASP.NET中编写一个模板自定义控件,该控件将包含一个项集合。我希望使用它类似于ASP.NET中的内置DropDownList控件,但我的项目将具有不同的属性 我注意到用于表示DropDownList控件(或任何列表控件)中的项的ListItem类实现了IParserAccessor接口。我应该什么时候实现这个接口,在它的AddParsedSubObject(objectobj)中应该做什么。我在网上搜索过,但找不到一个例子或一个很好的解释 我假设我的自定义控件的项将在不实现

我正在尝试在C#,ASP.NET中编写一个模板自定义控件,该控件将包含一个项集合。我希望使用它类似于ASP.NET中的内置
DropDownList
控件,但我的项目将具有不同的属性

我注意到用于表示
DropDownList
控件(或任何列表控件)中的项的
ListItem
类实现了
IParserAccessor
接口。我应该什么时候实现这个接口,在它的
AddParsedSubObject(objectobj)
中应该做什么。我在网上搜索过,但找不到一个例子或一个很好的解释


我假设我的自定义控件的项将在不实现该接口的情况下实现,但是,出于好奇,我很高兴了解更多有关它的信息。

您不需要实现IParserAccessor就可以获得您所谈论的功能。而是创建一个集合来保存服务器控件中的子控件(我们称之为Items),并将
ParseChildren
属性应用于服务器控件,并将“Items”作为DefaultProperty值

以下链接包含如何实现ParseChildren的示例:

更新
有关IParserAccessor的信息:

发件人:

因为控件类实现了这个接口,所以 扩展该类并重写其 AddParsedSubObject方法,而不是自己实现此接口

发件人:(参见imagemaker的帖子):

AddParsedSubObject是IParserAccessor的唯一方法 接口。IParserAccessor接口由控件和 从控件继承的所有类以及ListItem类。 当实现的子控件或服务器控件的元素 IParserAccessor接口是从HTML解析的 使用以下方法调用AddParsedSubObject方法 签名如下:

VB——子AddParsedSubObject(ByVal obj作为对象)
C#--void AddParsedSubObject(object obj)

obj参数表示对象 已经分析过了。在自定义服务器中,控件被覆盖 AddParsedSubObject方法,然后可以检查obj的类型 相应地强制转换和处理它,例如作为文本控件或 作为特定的子元素,通过将其添加到子控件 收藏、物品收藏或其他任何东西

这是同一篇文章的一个例子:

在这里,我第一次遇到了实现IParserAccessor的问题 接口和AddParsedSubObject在为 需要包含字符串作为其内部内容的子元素:

然后,在我的StyledList类(继承自WebControl)中,我需要重写它的 AddParsedSubObject方法如下所示:

这里,在检查obj是否是StyledItem之后,它被添加到 控件的项集合


谢谢你的回复。尽管如此,我还是很高兴能了解更多关于
IParserAccessor
接口的信息,最好能举一个使用它的例子——正如我出于好奇所说的那样。我猜这与子解析有关——可能是允许每个子解析提供自定义解析逻辑,但我找不到任何好的使用示例。目前,
ParseChildren
属性应该满足我的需要。感谢您的努力,这正是我要查找的信息。
<WESNet:StyledList id="StyledList1" runat="server">    
<WESNet:StyledItem Value="2" ForeColor="red">Two</WESNet:StyledItem>  
<WESNet:StyledItem Value="5"
ForeColor="green">Five</WESNet:StyledItem></WESNet:StyledList>Because
Protected Sub AddParsedSubObject(ByVal obj As Object) Implements IParserAccessor.AddParsedSubObject
   If TypeOf obj Is LiteralControl Then
         Me.Text = CType(obj, LiteralControl).Text
   Else
        Throw New ArgumentException("Inner content of StyledItem must contain only static text")
   End If
End Sub
Protected Overrides Sub AddParsedSubObject(ByVal obj As Object)
   If TypeOf obj Is StyledItem Then
         Dim si As StyledItem = CType(obj, StyledItem)
         Items.Add(si)
   Else
         Throw New ArgumentException ("A StyledList server control may contain only StyledItems")
   End If
End Sub