Literal コントロールは Label コントロールとほぼ同じですが、Literal コントロールでは、表示するテキストにスタイルを適用できないという点が異なります。
RaiseBubbleEvent メソッドを利用する
Repeater、DataList、GridView の各 Web コントロールなどの ASP.NET サーバー コントロールには、イベントを発生させる子コントロールを格納できます。たとえば、GridView コントロールの各行に、テンプレートによって動的に作成された 1 つ以上のボタンを格納できます。各ボタンが個別にイベントを発生させるのではなく、入れ子になったコントロールからのイベントは "バブル イベント" になります。つまり、それらのイベントは、コントロールの親に送信されます。親はパラメータ値を使用して RowCommand と呼ばれる汎用的なイベントを順番に発生させます。これらの値を使用すると、元のイベントを発生させた個別のコントロールを確認できます。この単一イベントに応答することによって、子コントロールのために個別のイベント処理メソッドを書き込む必要がなくなります。
http://msdn.microsoft.com/ja-jp/library/system.web.ui.control.raisebubbleevent(VS.80).aspx
TextBoxコントロールにValidate子コントロールを追加できますが、動作がしません。
http://www.telerik.com/community/forums/aspnet/input/extending-radtextbox-to-include-validators-as-child-controls.aspx
【ユーザーコントロール定義側】
作成したユーザーコントロールの属性にValidationPropertyAttribute属性を付加させる必要がある。
例:
[ValidationProperty("Text")] public partial class uc_TextBoxEX : System.Web.UI.UserControl
以上に設定すると、Visual Studio のデザインモードで、ValidationControlの「ControlToValidate」プロパティから、対象コントロールが現れます。ValidationProperty属性を設定していなくて、無理やりでValidationControl の「ControlToValidate」プロパティに対象コントロールのIDを記入する場合、コンパイル時はエラーが発生しませんが、実行時エラーが発生します。
IPostBackDataHandler.LoadPostDataメソッドをテキストボックス、チェックボックスなどのコントロールに利用(override)して、PostBackした後、値は変更したかどうかの確認ができます。
サーバー コントロールのポストバック データを処理します。
ポストされた内容が前回ポストされた内容と異なる場合は true。それ以外の場合は false。
Methodの方式は、Getまたは新しいウィンドウを開く際に、値を取得できない。
ページのEventValidation属性を有効に設定している場合、Asp.netはコントロールのイベントのPostbackが偽装かどうかの検証を行いますし、Callback パラメータも検証します。EventValidationをサポートするカスタムコントロールを作る場合は、この属性をつけておかないとページのEventValidationを有効にしていたとしてもValidationが行われないらしい。
※逆に一部のコントロールだけEventValidationの対象外にしたい場合は、派生クラスを作ってこの属性をつけなければいいみたい。
Postbackが偽装される可能性がある場合、下記の例外が発生します。
Invalid postback or callback argument.
もし予期であるパラメータなどの場合、上記する例外を回避するために、ClientScriptManager.RegisterForEventValidation を利用して、Postbackや、Callbackパラメータを登録して、解決できます。
Visual Studio でカスタマイズコントロールのプロパティ一覧を見る時、フォーカスはデフォルトにとのプロパティにアクティブしているかを定義する。
例:
[DefaultProperty("Text")]
「Text」プロパティがアクティブしている
DefaultPropertyAttributeに見ている、Visual Studio でカスタマイズコントロールのイベント一覧を見る時、フォーカスはデフォルトにとのイベントにアクティブしているかを定義する。
例:
[DefaultEvent("Click")]
「Click」プロパティがアクティブしている
再調査
MSDNの説明からみると、これはプロパティの値を設定する属性見えるけど、実際の操作に確認できない。
http://msdn.microsoft.com/ja-jp/library/system.web.ui.controlvaluepropertyattribute(VS.80).aspx
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; } } }
ParseChildrenAttribute と 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
http://www.cnblogs.com/tedzhao/archive/2008/05/10/1190772.html
http://www.cnblogs.com/aspnet2008/archive/2008/07/28/1254723.html
カスタマイズするコントロールを子コントロールとして利用する場合、付ける属性です。
ControlBuilderと一緒に利用する場合が多い。ページパーサーがどういう風にコントロールを分析するか、ContorlBuilderによって記述する。
ページパーサー
コントロールを配置する際に、生成するHTMLタグのソースコードを定義する。
例:
[ToolboxData("<{0}:CheckBox runat=\"server\" HtmlEncode=\"True\"></{0}:CheckBox>")]
ASP.NET サーバー コントロールが検証プロパティの識別のために使用するメタデータ属性を定義します。このクラスは継承できません。
Asp.net標準で提供する検証コントロールには、すべてControlToValidateプロパティを付けています。「CustomValidator」以外のすべての検証コントロールのControlToValidateプロパティは必ず、「ValidationPropertyAttribute」属性と表記されているコントロールのIDを指定すること。つまりは、コントロールは検証させたい場合、必ずValidationPropertyAttribute属性を付けること。
ScriptManagerは、マスタページを持たないPage内、あるいはマスタページ内で使用する. ScriptManagerProxyは、マスタページを持つPage内で使用する.
参考情報:
http://d.hatena.ne.jp/fyts/20071016/scriptmanager
参考情報:
ClientScriptManager.RegisterStartupScriptの引数の意味
http://social.msdn.microsoft.com/Forums/ja-JP/vbgeneralja/thread/6d282c78-7e50-47af-bd8c-10d1a3665eb4
ページに<%@ Page EnableEventValidation="true" %>の設定は、Formタグに危険な文字コードが入っているか、またはコントロールのPostBack、CallBackイベントに利用するパラメータは、本当に最初に提供するコントロールからもらったものかを検証する。ページのEnableEventValidation属性をtrueに設定している場合、動作中に、JavaScriptなどの外部プログラムから、コントロールを変更したい時、ClientScriptManager.RegisterForEventValidation を利用して、ページに現在変更したものは大丈夫という旨を伝える。この一方に ClientScriptManager.RegisterForEventValidation を利用しても、コントロールに危険と認識する文字列の排除はできません。
http://www.cnblogs.com/dongyongjing/archive/2007/03/07/666427.html
为了使一般按钮也具有回发的功能,ASP.NET提供了Page.ClientScript.GetPostBackEventReferenceメソッド。
参考情報:
http://book.51cto.com/art/200902/108932.htm
動的にページ応答(Response)で、クライアント側のスクリプト ブロックを出力します。
検証コントロールデフォルトは、空白の文字列を検証しない仕様なので、TextBoxにある空白の文字列も検証したい場合、検証コントロールの「ValidateEmptyText」プロパティを「True」と設定する必要があります。
一つの検証コントロールは複数のValidationGroupに所属・共有することができない。
e[NȂECir Yahoo yV LINEf[^[Ōz500~`I
z[y[W ̃NWbgJ[h COiq@COsیI COze