1

多くのテキストボックスと入力するドロップダウンリストを備えたかなり大きな ASPX フォームがあります。ほとんどのテキストボックスには RequiredFieldValidator コントロールがあり、これらは問題なく機能します。

ただし、自宅、携帯電話、職場の電話番号用に 3 つのテキスト ボックスがあります。各テキストボックスはオプションですが、入力する場合、値は数値でなければなりません。この時点では、電話番号の形式を検証する必要はありません。数値であることだけを確認してください。

フィールドの 1 つのクライアント側コードは次のようになります。

<asp:Label ID="lblWorkPhone" runat="server" AssociatedControlID="txtWorkPhone" Text="<%$ Resources: Registration, WorkPhone %>" /><br />
<asp:TextBox ID="txtWorkPhone" runat="server" />
<asp:CustomValidator ID="validateWorkPhone" runat="server" 
                            ValidationGroup="reg" ControlToValidate="txtWorkPhone" ForeColor="Red" 
                            ErrorMessage="<%$ Resources: Registration, HomePhoneNumber %>" 
                            Text="<%$ Resources: Registration, RequireMessage %>" 
                            onservervalidate="validateWorkPhone_ServerValidate" />

サーバー側の検証方法は次のとおりです。

protected void validateWorkPhone_ServerValidate(object source, ServerValidateEventArgs args)
{
    long temp = 0;

    long.TryParse(txtWorkPhone.Text, out temp);

    if (temp == 0)
    {
        args.IsValid = false;
        validateWorkPhone.IsValid = true;
    }
    else
    {
        args.IsValid = true;
        validateWorkPhone.IsValid = false;
    }
}

私が知る限り、サーバー側の検証メソッドはまったく起動していません。ページ上の他のすべての検証コントロールは正常に機能しているようです。

誰でも助けることができますか?

4

3 に答える 3

1

クライアント側バリデーター (RequiredFieldValidators など) は有効ですか? サーバー側のバリデーターは、すべてのクライアント側のバリデーターが有効な場合にのみ起動します。

編集
RequiredFieldValidator や RegularExpressionValidator などのほとんどのバリデータは、クライアント側とサーバー側の両方で検証を実行します。クライアント側の検証が失敗すると、送信がキャンセルされるため、サーバー側のみの検証は開始されません。

CustomValidator の場合、必要に応じて、クライアント側の検証を明示的に追加する必要があります。

于 2012-04-10T14:15:49.003 に答える
1

数値であることのみを検証する必要がある場合は、代わりに RegexValidator を使用してみませんか? サーバーへの旅行を節約できます。

上記の MSDN 記事。数値を含む一般的な正規表現のリスト。

于 2012-04-10T14:04:34.303 に答える
0

この投稿はもうありませんが、同様の問題が発生し、.NET のバグに絞り込まれました。私のカスタムバリデーターはパネル内にあり、ページの読み込み時にプログラムで可視性を false に設定し、後でコードで true に設定していました。私には違いはありませんが、.aspx ファイルでパネルのデフォルト値を false に設定すると、コードの可視性を決して false に設定しなくても問題なく動作します。

奇妙なことに、可視性を false に設定するキャンセル ボタンがありますが、それ以上の問題はありません。

于 2013-04-07T17:10:33.463 に答える