\FrontPage\Asp.Net

コントロール関連Tips

LiteralコントロールとLabelコントロールの違い

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

カスタマイズしたコントロールにValidationControlを使いたい場合

【ユーザーコントロール定義側】
作成したユーザーコントロールの属性にValidationPropertyAttribute属性を付加させる必要がある。

例:

[ValidationProperty("Text")]
public partial class uc_TextBoxEX : System.Web.UI.UserControl

以上に設定すると、Visual Studio のデザインモードで、ValidationControlの「ControlToValidate」プロパティから、対象コントロールが現れます。ValidationProperty属性を設定していなくて、無理やりでValidationControl の「ControlToValidate」プロパティに対象コントロールのIDを記入する場合、コンパイル時はエラーが発生しませんが、実行時エラーが発生します。

PostBack後コントロールの値が変更されたかどうか

 IPostBackDataHandler.LoadPostDataメソッドをテキストボックス、チェックボックスなどのコントロールに利用(override)して、PostBackした後、値は変更したかどうかの確認ができます。
 サーバー コントロールのポストバック データを処理します。
 ポストされた内容が前回ポストされた内容と異なる場合は true。それ以外の場合は false。

HiddenField

Methodの方式は、Getまたは新しいウィンドウを開く際に、値を取得できない。

コントロールの属性

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; }
     }
}


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

ParseChildrenAttribute

カスタマイズするコントロールを子コントロールとして利用する場合、付ける属性です。

ControlBuilderと一緒に利用する場合が多い。ページパーサーがどういう風にコントロールを分析するか、ContorlBuilderによって記述する。

ControlBuilder

ページパーサー

ToolboxDataAttribute

コントロールを配置する際に、生成するHTMLタグのソースコードを定義する。

例:

[ToolboxData("<{0}:CheckBox runat=\"server\" HtmlEncode=\"True\"></{0}:CheckBox>")]

ValidationPropertyAttribute

 ASP.NET サーバー コントロールが検証プロパティの識別のために使用するメタデータ属性を定義します。このクラスは継承できません。


 Asp.net標準で提供する検証コントロールには、すべてControlToValidateプロパティを付けています。「CustomValidator」以外のすべての検証コントロールのControlToValidateプロパティは必ず、「ValidationPropertyAttribute」属性と表記されているコントロールのIDを指定すること。つまりは、コントロールは検証させたい場合、必ずValidationPropertyAttribute属性を付けること。

Scriptコントロール

ScriptManagerとScriptManagerProxyの使い分け

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

ClientScriptManager.RegisterForEventValidation

 ページに<%@ Page EnableEventValidation="true" %>の設定は、Formタグに危険な文字コードが入っているか、またはコントロールのPostBack、CallBackイベントに利用するパラメータは、本当に最初に提供するコントロールからもらったものかを検証する。ページのEnableEventValidation属性をtrueに設定している場合、動作中に、JavaScriptなどの外部プログラムから、コントロールを変更したい時、ClientScriptManager.RegisterForEventValidation を利用して、ページに現在変更したものは大丈夫という旨を伝える。この一方に ClientScriptManager.RegisterForEventValidation を利用しても、コントロールに危険と認識する文字列の排除はできません。

http://www.cnblogs.com/dongyongjing/archive/2007/03/07/666427.html

GetPostBackEventReference

为了使一般按钮也具有回发的功能,ASP.NET提供了Page.ClientScript.GetPostBackEventReferenceメソッド。

参考情報:
http://book.51cto.com/art/200902/108932.htm

RegisterStartupScript

動的にページ応答(Response)で、クライアント側のスクリプト ブロックを出力します。

検証コントロール

空白文字列の検証

 検証コントロールデフォルトは、空白の文字列を検証しない仕様なので、TextBoxにある空白の文字列も検証したい場合、検証コントロールの「ValidateEmptyText」プロパティを「True」と設定する必要があります。

検証コントロールのValidationGroup属性

一つの検証コントロールは複数のValidationGroupに所属・共有することができない。



(画像の文字列を入力して下さい)

Tips

デザイナでラベルのTextプロパティに、複数行入力したいのであれば、Textに次の属性をつける。

[Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(System.Drawing.Design.UITypeEditor))]

トップ   編集 凍結解除 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019/12/02 (月) 12:45:33 (1628d)

G|Cg|C@Amazon Yahoo yV

z[y[W yVoC[UNLIMITȂ1~] COiq COsیI