如何在自定义ASP中使用IParserAccessor接口?网络控制
本文关键字:接口 IParserAccessor 网络 控制 自定义 ASP | 更新日期: 2023-09-27 18:03:47
我正在尝试在c#, ASP中编写模板自定义控件。NET,它将有一个项目集合。我想使用它类似于内置的DropDownList
控件在ASP。. NET,但我的项目将有不同的属性。
我注意到用于表示DropDownList
控件(或任何列表控件)中的项目的ListItem
类实现了IParserAccessor
接口。我应该什么时候实现这个接口,我应该在它的AddParsedSubObject(object obj)
中做什么。我已经在网上搜索过了,但我找不到一个例子或一个很好的解释。
我假设我的自定义控件的项将不需要实现该接口,但是,只是出于好奇,我很高兴了解更多关于它的信息。
您不需要实现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之后,它被添加到控件的项集合。