4
何らかの理由で、WebControlではなくControlから派生したカスタムコントロールを作成したいと思っています。また、WebControlのようにAttributeCollectionを使用して属性(つまりIAttributeAccessorを実装)を処理する必要があると仮定します。ASP.NET StateBagとカスタムコントロール
- あなたはStateBagそれを与えることなくattributeCollectionを作成できません:以下
public AttributeCollection Attributes { get { if (this.attrColl == null) { if (this.attrState == null) { this.attrState = new StateBag(true); if (base.IsTrackingViewState]) { this.attrState.TrackViewState(); } } this.attrColl = new AttributeCollection(this.attrState); } return this.attrColl; } }
注:
WebBrowserコントロールは、このような属性のプロパティを実装します。
- 新しいStateBagを作成する必要があります。属性がコントロールによって格納された値として名前を持つ可能性があるので、コントロールStateBagを再利用することは賢明ではありません。
- これは内部メソッドであるため、StateBagでTrackViewStateを呼び出すことはできません。
- StateBagはシールされたクラスです。
私がAttributeCollectionを使用したいのであれば、私は決して(リフレクションのようなトリックに頼らずに)新しいStateBagを使用する必要があります。
何か不足していますか?
これはStateBagのTrackViewStateへの呼び出しです。これは内部的なものです。 – drs9222
遅い返信をおかけして申し訳ありません。私は私の答えを更新しました。 – womp
悲しいですが、私は実際にインターフェイスの隠蔽によって混乱しました。私はインターフェイスを明示的に実装していませんでしたが、内部的にできることから推測してください。私を真っ直ぐにしてくれてありがとう – drs9222