時間フィールド (「09:00」、「15:35」など) で独自のアプリケーションのロジックを処理する CustomValidator を構築していますが、オンラインで説明が見つからない動作につまずいています。
現在私が注目しているのは、クライアント側で実行される検証ロジックです。
タイトルで述べたように、問題は、Validator で ControlToValidate プロパティを検証中のテキストボックスの ID に設定した場合にのみ、フォーカスがテキストボックスを離れるとすぐに検証が開始されることです。onblur イベントの前にも発生しますが、これは私にとって絶対に有害です。これは、onblur イベントを使用して時間形式を標準化しているためです (例: "9:00" -> "09:00"、"11.45" -> "11: 45") であるため、検証ロジックが誤った値を受け取る可能性があります。一方、ControlToValidate プロパティが空白のままの場合、ClientValidationFunction は送信/ポストバックでのみ起動されます。
私が見つけた唯一の関連する答えはこれhttps://stackoverflow.com/a/8649697/450684ですが、それでも私にはまったく意味がありません。ControlToValidate の存在が、onblur の前にクライアント側の検証を実行する必要があることを示す必要があるのはなぜですか? いらない!この動作を抑制する方法はありますか?
以下はページの例です。
<asp:TextBox runat="server" AutoPostBack="false" ID="txtBox1" onblur="FormatText(this);" />
<asp:CustomValidator runat="server" ID="CV1" ControlToValidate="txtBox1" ClientValidationFunction="Test1" />
<asp:CustomValidator runat="server" ID="CV2" ClientValidationFunction="Test2" />
<asp:Button ID="btn1" Text="postback" runat="server" OnClick="btn1_Click" />
<asp:Label ID="lbl1" runat="server" />
<script type="text/javascript">
function FormatText(txtBox1)
{
alert('FormatText');
}
function Test1(val, args)
{
alert('Test1');
}
function Test2(val, args)
{
alert('Test2');
}</script>
私が望むのは、Test1 と Test2 の両方が btn1 のクリックでのみ実行されることです。代わりに、txtBox1 の onblur イベントで、Test1 と FormatText をこの順序で実行します。
ASP.NET のクライアント検証は、書いたり勉強したりするのがとても楽しかったです。これですべてが台無しにならないようにしてください :-)
どうも
PS: .NET フレームワークのバージョンは 4.0 です。さらに、サーバー側の言語は C# です。