あなたが話しているような機能を得るためにIParserAccessorを実装する必要はありません。代わりに、サーバーコントロール内の子コントロール(アイテムと呼ぶ)を保持するコレクションを作成し、DefaultProperty値として "Items"を持つサーバーコントロールにParseChildren
属性を適用します。
次のリンクはParseChildrenを実装する方法についての例が含まれていますIParserAccessor上
http://msdn.microsoft.com/en-us/library/aa310907(v=vs.71).aspx
更新
情報:
から:http://msdn.microsoft.com/en-us/library/system.web.ui.iparseraccessor.aspx
Controlクラスの実装しているのでこのインターフェイスは、より簡単です そのクラスを拡張して、このインターフェイスを自分で実装するよりも、 AddParsedSubObjectメソッドの実装をオーバーライドします。 http://forums.asp.net/t/879797.aspx/1(imagemakerの記事を参照してください):から
AddParsedSubObjectのは、IParserAccessor インタフェースの唯一の方法です。 IParserAccessorインターフェイスは、Controlと によってすべてのクラスがControlおよびListItemクラスを継承して実装されています。子コントロールまたは IParserAccessorインターフェイスを実装するサーバーコントロールの要素がHTMLから解析される場合、 AddParsedSubObjectの方法は、以下の方法 シグネチャと呼ばれる は次の
VB - サブAddParsedSubObjectの(オブジェクトとしてByVal OBJ)
C# - void AddParsedSubObject(object obj)
objパラメータは、解析されたオブジェクト を表します。カスタムサーバーコントロールでオーバーライドされた AddParsedSubObjectメソッドを使用すると、objの種類を確認して をキャストして、リテラルコントロールや を特定の子要素としてキャストして処理することができます。子コントロールに追加する コレクション、アイテムのコレクションまたは何でも。
ここでは、同じポストからexamleです:私が最初にIParserAccessor インタフェースとAddParsedSubObjectのを実装するために必要な含ま 子要素のためのクラスを定義していたに対処するに走った
その内側の内容として文字列:
<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
次に、(WebControlから継承されます。)私のStyledListクラスで、私はその を上書きするために必要な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
をここで、確認した後、そのobjがStyledItemである場合、コントロールのItemsコレクションに という要素が追加されます。
ご回答いただきありがとうございます。それでも、 'IParserAccessor'インターフェースについてもっと知りたいと思っています。私は、好奇心を中心に説明したように、使い方の例が好ましいと思います。私は子供の解析と何か関係があると思います - おそらく各子供がカスタム解析ロジックを提供できるようにするために、私はその使用法の良い例を見つけることができませんでした。現在、 'ParseChildren'属性は私が必要とするものを行うべきです。 –
@Ivaylo Slavov - 更新された投稿。 – Peter
努力してくれてありがとう、それはまさに私が探していた情報でした。 –