SupportsEventValidationAttribute
ページのEventValidation属性を有効に設定している場合、Asp.netはコントロールのイベントのPostbackが偽装かどうかの検証を行いますし、Callback パラメータも検証します。
EventValidationをサポートするカスタムコントロールを作る場合は、この属性をつけておかないとページのEventValidationを有効にしていたとしてもValidationが行われないらしいです。
※逆に一部のコントロールだけEventValidationの対象外にしたい場合は、派生クラスを作ってこの属性をつけなければいいみたいです。
Postbackが偽装される可能性がある場合、下記の例外が発生します。
Invalid postback or callback argument.
もし予期であるパラメータなどの場合、上記する例外を回避するために、ClientScriptManager.RegisterForEventValidation を利用して、Postbackや、Callbackパラメータを登録して、解決できます。
DefaultPropertyAttribute
Visual Studio でカスタマイズコントロールのプロパティ一覧を見る時、フォーカスはデフォルトにどのプロパティにアクティブしているかを定義します。
例:
[DefaultProperty(“Text”)]
「Text」プロパティがアクティブしている
DefaultEventAttribute
DefaultPropertyAttributeに見ている、Visual Studio でカスタマイズコントロールのイベント一覧を見る時、フォーカスはデフォルトにどのイベントにアクティブしているかを定義します。
例:
[DefaultEvent(“Click”)]
「Click」プロパティがアクティブしている
ControlValuePropertyAttribute
MSDNの説明からみると、これはプロパティの値を設定する属性に見えるけど、実際の操作は確認できません。
http://msdn.microsoft.com/ja-jp/library/system.web.ui.controlvaluepropertyattribute(VS.80).aspx
ParseChildrenAttribute と PersistChildrenAttribute
ParseChildrenAttribute 属性は入れ子コントロールを格納できないコントロールに、子コントロールを入れて格納したい場合、或いはそもそも容器ではないコントロールに子コントロールを入れるために、利用する属性です。逆属性を付けなくて、Asp.netマークアップコードで入れ子があるコントロールを定義すると、パーサーエラーが発生します。
例: asp.net マークアップ側のコード
<cc2:CustomTextBox ID="CustomTextBox1" runat="server"> <cc2:CustomLabel ID="CustomLabel1" runat="server"></cc2:CustomLabel> </cc2:CustomTextBox>
カスタマイズコントロールの定義
[ParseChildren(true)] public class CustomTextBox : System.Web.UI.WebControls.TextBox { CustomLabel display_ = new CustomLabel(); //これをプロパティを定義する必要があります。 public CustomLabel CustomLabel { get { return display_; } set { display_ = value; } } }
arseChildrenAttribute と PersistChildrenAttributeがよく組み合わせて利用されています。
PersistChildrenAttribute は、コントロールの入れ子になった内容の解釈方法を示す ParseChildrenAttribute と組み合わせて使用されます。
△PersistChildrenAttribute が true で、ParseChildrenAttribute が false の場合、ASP.NET サーバー コントロール内の入れ子になった内容はコントロールとして保持されます。
コントロールはコンテナとすることができない場合、以上のように設定してもエラーとなります。
△PersistChildrenAttribute が false で、ParseChildrenAttribute が true の場合、入れ子になった内容はサーバー コントロールのプロパティとして保持されます。
コントロールはコンテナとすることがでもなくても、エラーが発生しません。
参考情報:
http://msdn.microsoft.com/ja-jp/library/system.web.ui.persistchildrenattribute.aspx
ParseChildrenAttribute
カスタマイズするコントロールを子コントロールとして利用する場合、付ける属性です。
ControlBuilderと一緒に利用する場合が多い。ページパーサーがどういう風にコントロールを分析するか、ContorlBuilderによって記述する。
ToolboxDataAttribute
コントロールを配置する際に、生成するHTMLタグのソースコードを定義する。
例:
[ToolboxData("<{0}:CheckBox runat=\"server\" HtmlEncode=\"True\"></{0}:CheckBox>")]
ValidationPropertyAttribute
ASP.NET サーバー コントロールが検証プロパティの識別のために使用するメタデータ属性を定義します。このクラスは継承できません。
Asp.net標準で提供する検証コントロールには、すべてControlToValidateプロパティを付けています。
「CustomValidator」以外のすべての検証コントロールのControlToValidateプロパティは必ず、「ValidationPropertyAttribute」属性と表記されているコントロールのIDを指定します。
つまり、コントロールは検証させたい場合、必ずValidationPropertyAttribute属性を付けます。