検証コントロールと共に TextBoxWatermark を使用する (VB)

作成者: Christian Wenz

PDF のダウンロード

テキスト ボックス内にテキストが表示されるように、AJAX Control Toolkit の TextBoxWatermark コントロールによってそのボックスが拡張されます。 ボックスは、ユーザーがクリックすると空になります。 ユーザーがテキストを入力せずにボックスから離れると、事前入力されたテキストが再表示されます。 これは同じページ上の ASP.NET 検証コントロールと競合する可能性がありますが、このような問題は解決できます。

概要

テキスト ボックス内にテキストが表示されるように、AJAX Control Toolkit の TextBoxWatermark コントロールによってそのボックスが拡張されます。 ボックスは、ユーザーがクリックすると空になります。 ユーザーがテキストを入力せずにボックスから離れると、事前入力されたテキストが再表示されます。 これは同じページ上の ASP.NET 検証コントロールと競合する可能性がありますが、このような問題は解決できます。

手順

サンプルの基本的な設定は次のとおりです: TextBoxWatermarkExtender コントロールを使用して TextBox コントロールに透かしを付けます。 ポストバックがボタンによってトリガーされ、後でページ上の検証コントロールをトリガーするために使用されます。 また、ASP.NET AJAX を初期化するには、ScriptManager コントロールが必要です。

<form id="form1" runat="server">
 <asp:ScriptManager ID="asm" runat="server" />
 <div>
 <asp:TextBox ID="Name" runat="server" /> <br />
 <asp:Button ID="btn" runat="server" Text="Submit" OnClick="btn_Click" /><br />
 <asp:Label ID="lbl" runat="server" />
 </div>
 <ajaxToolkit:TextBoxWatermarkExtender ID="tbwe" runat="server"
 TargetControlID="Name" WatermarkText=" Your Name " />
</form>

ここで、フォーム送信時にフィールド内にテキストがあるかどうかをチェックする RequiredFieldValidator コントロールを追加します。 検証コントロールの InitialValue プロパティは、TextBoxWatermarkExtender コントロールで使用されるのと同じ値に設定する必要があります。フォームが送信されるとき、変更されていないテキスト ボックスの値は、その中の透かしの値になります。

<asp:RequiredFieldValidator ID="rfv1" ControlToValidate="Name"
 Text="*" InitialValue=" Your Name " Display="Dynamic" runat="server" />

ただし、この方法には 1 つの問題があります。クライアントが JavaScript を無効にすると、テキスト フィールドに透かしテキストが事前入力されないため、RequiredFieldValidator によってエラー メッセージはトリガーされません。 そのため、空のテキスト ボックスをチェックする 2 つ目の RequiredFieldValidator コントロールが必要です (InitialValue 属性は省略)。

<asp:RequiredFieldValidator ID="rfv2" ControlToValidate="Name"
 Text="*" Display="Dynamic" runat="server" />

両方の検証コントロールで Display="Dynamic" が使用されるため、エンド ユーザーは 2 つの検証コントロールのうちどちらが発生したかを視覚的な外観からは区別できません。代わりに、そのうちの 1 つだけが存在しているように見えます。

最後に、検証コントロールによってエラー メッセージが発行されなかった場合にフィールドにテキストを出力するサーバー側コードを追加します。

<script runat="server">
 Protected Sub btn_Click(ByVal sender As Object, ByVal e As System.EventArgs)
 lbl.Text = HttpUtility.HtmlEncode(Name.Text)
 End Sub
</script>

フィールド内にテキストがないことが検証コントロールによって指摘される

検証コントロールによって、フィールド内にテキストがないことが示されます (クリックするとフルサイズの画像が表示されます)