5

System.Web.UI.WebControls名前空間のすべてではないにしてもほとんどの標準Webコントロールで、ページをクラッシュさせることなく、必要なプロパティを追加できることに気付きました。

例として、asp:Buttonコントロールを取り上げます。

このコードは完全に有効です:

<form runat="server">
    <asp:Button runat="server" Text="Test button" crapAttribute="crapValue" />
</form>

これで、任意の属性を追加するとクラッシュするカスタムサーバーコントロールができました。対応するパブリックプロパティが定義されている属性のみを受け入れます。

私が得るエラーは、「コントロールには「crapAttribute」という名前のパブリックプロパティがありません」のようなものです。

カスタムコントロールがクラッシュすることなく任意の属性を受け入れるようにしたいと思います。それが機能するために私は何をする必要がありますか?

私はReflectorの標準コントロールを見てきましたが、それらにはあらゆる種類の属性などがありますが、すぐに目を引くものは何もありませんでした。

私のカスタムコントロールは、その価値のためにWebControlから継承しています。

4

2 に答える 2

4

任意の属性にコントロールマークアップを追加できるようにするために、特に何もする必要はありません。WebControlから派生したものは、通常、これらの属性をすくい上げて、Attributesコレクションにダンプします。

これが失敗する理由が思いつかない。コレクションがある場合Attributesは、実装でコレクションをレンダリングすることを忘れないでください。Render

質問に失敗する新しいコントロールのコードの簡単な例を追加できますか?

于 2009-11-03T16:26:53.993 に答える
0

これを行う1つの方法は、コードビハインドにカスタムプロパティを追加することです

myCustomControl.Attributes.Add("customproperty", "value");

これはあなたのために仕事をするはずです。

ただし、サーバーコントロール自体でそれを行う方法を知りたいと思っています。

于 2009-11-03T16:19:08.480 に答える