如何在自定义ASP中使用IParserAccessor接口?网络控制

本文关键字:接口 IParserAccessor 网络 控制 自定义 ASP | 更新日期: 2023-09-27 18:03:47

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

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

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

如何在自定义ASP中使用IParserAccessor接口?网络控制

您不需要实现IParserAccessor来获得您正在谈论的功能。相反,创建一个集合来保存服务器控件中的子控件(我们将其称为Items),并将ParseChildren属性应用于服务器控件,并将"Items"作为DefaultProperty值。

下面的链接包含了如何实现ParseChildren的示例:
http://msdn.microsoft.com/en-us/library/aa310907 (v = vs.71) . aspx


IParserAccessor信息:

从:http://msdn.microsoft.com/en-us/library/system.web.ui.iparseraccessor.aspx

因为Control类实现了这个接口,所以更容易类的实现方法,而不是自己实现这个接口。

来自:http://forums.asp.net/t/879797.aspx/1(参见imagemaker的帖子):

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

VB—Sub AddParsedSubObject(ByVal obj As Object)
c#——void AddParsedSubObject(object obj)

obj参数表示对象这已经被解析过了。在自定义服务器控件中重写AddParsedSubObject方法,然后可以检查对象的类型转换并相应地处理它,例如作为文字控件或作为特定的子元素,通过将其添加到子控件中集合,物品集合或者其他什么

下面是同一篇文章中的一个例子:

我第一次遇到处理实现IParserAccessor接口和AddParsedSubObject在为a定义类时需要包含一个字符串作为其内部内容的子元素:

<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

我的StyledItem类没有从Control继承,我必须实现IParserAccessor和它的AddParsedSubObject如下:

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
然后,在我的StyledList类(继承自WebControl)中,我需要重写它AddParsedSubObject方法如下:
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

在这里,在检查了对象是否为StyledItem之后,它被添加到控件的项集合。