29

texbox を検証するための必須フィールド バリデーターとカスタム バリデーターの両方があります。必須フィールドバリデーターは完全に起動します。カスタムバリデーターを適切に起動させることができませんか?

<asp:TextBox ID="txtPRI" runat="server" Width="295" /><br />

<asp:RequiredFieldValidator display="Dynamic" CssClass="leftAlign" SetFocusOnError="true"  runat="server" controltovalidate="txtPRI" errormessage="Please enter your PRI" />

 <asp:CustomValidator runat="server" id="cusCustom" controltovalidate="txtPRI" onservervalidate="cusCustom_ServerValidate" Enabled="true" ValidateEmptyText="true" display="Dynamic" CssClass="leftAlign" SetFocusOnError="true"  errormessage="The text must be exactly 8 characters long!" />

コードビハインド

protected void cusCustom_ServerValidate(object sender, ServerValidateEventArgs e)
    {
        Response.Write("firing - test");
        Response.End();


        if (e.Value.Length == 8)
            e.IsValid = true;
        else
            e.IsValid = false;
    }
4

8 に答える 8

52

空のテキストが検証されるように、CustomValidatorプロパティValidateEmptyTextが に設定されていることを確認してください。trueその後、もう必要ありRequiredFieldValidatorません。

編集:あなたのコードをコピーして空のプロジェクトに貼り付けたところ、期待どおりに動作しました。私たちが認識していない、投稿していない、または誤って投稿している何かがあるに違いありません. 検証または検証コントロール自体をトリガーしているボタンに影響を与えるものは他にありますか?

編集:これが正確なコードです(コンテンツページにあります):

aspx ページ:

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <asp:TextBox ID="txtPRI" runat="server" Width="295" /><br />
    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" display="Dynamic" CssClass="leftAlign" SetFocusOnError="true"  runat="server" controltovalidate="txtPRI" errormessage="Please enter your PRI" />  
    <asp:CustomValidator runat="server" id="cusCustom" controltovalidate="txtPRI" onservervalidate="cusCustom_ServerValidate" Enabled="true" ValidateEmptyText="true" display="Dynamic" CssClass="leftAlign" SetFocusOnError="true"  errormessage="The text must be exactly 8 characters long!" /> 
</asp:Content>

.cs ページ (空Page_Load):

protected void cusCustom_ServerValidate(object sender, ServerValidateEventArgs e)
{ 
    // put a break point here and it stops on it
    if (e.Value.Length == 8)
        e.IsValid = true;
    else
        e.IsValid = false;
} 
于 2011-02-25T17:04:19.410 に答える
18

わかりました...まだ受け入れられた答えがない本当に古い質問です、そして私はちょうど同じ問題に遭遇しました。

だから私はこの問題を抱えていて答えが必要な人のためにこれを捨てるつもりです...

カスタムサーバーの検証とともに定期的な検証を行っている場合、カスタムサーバーの検証は、他のすべての検証が正常に戻った場合にのみ起動します。少なくとも、それが私にとってはうまくいった方法です。

于 2012-03-02T03:59:19.767 に答える
1

Response.End()問題は、ページのすべての実行を効果的に停止する呼び出しを行っていることです。したがって、if/else ブロックはまったく実行されていません。デバッグ中にその行をコメントアウトするかスキップすると、バリデーターが期待どおりに起動します。

この方法で応答を書き出す代わりにデバッガーを使用するか、デバッガーを使用するResponse.End()ことを選択した場合の結果に注意することをお勧めします。

于 2011-02-25T16:55:09.630 に答える
1

私が覚えている限り、テキストボックスが空の場合、カスタムバリデーターは起動しません。

于 2011-02-25T16:59:44.170 に答える