0

私にはそのようなシナリオがあります。

2つの異なるDropDownListを含む2つのdiv。これらのdivの可視性は両方とも、2つの独立したチェックボックスによってクライアント側で制御され、両方のDropDownListには、divが非表示になっている場合(つまり、チェックボックスがオフになっている場合)に無効になると予想されるフィールドバリデーターが必要です。

したがって、フィールドバリデーターのクライアント側を無効にする方法があることを知って、私はクイック検索を実行して再検出しましValidatorEnable(Validator, Boolean);た。すべてを配線した後、チェックボックスがオフになっている場合、クライアント側の検証は正常に無視されますが、問題はサーバー側に到達した後です。

そのようなサーバーで典型的なシナリオを使用する

protected void btnSave_Click(object sender, EventArgs e)
{
    Page.Validate();
    if (Page.IsValid) 
    {

    }
}

サーバー側では、これは両方の側に影響を与えるはずだと腸が言ったので、驚いたことに、ページの検証では引き続きレポートが作成されIsValid = falseます。だから私は次のコードでいくつかのテストを実行しました...

$(Page_Validators).each(function (index, value) {
    ValidatorEnable(value, false);
});

そして、実際にはValidatorEnableメソッドはクライアント側の検証にのみ影響し、フィールドバリデーターのサーバー側の状態は変更されないままであることをすぐに確認しました。

今、私はおそらく、この問題に「ハッカリー」で対処するために頭のてっぺんからいくつかの方法を考えることができました。例:ポストバックのチェックボックスの状態をチェックし、必要に応じてバリデーターを無効にしたり、非表示フィールドを設定したりします。ただし、問題は、この機能を非常に大規模なプロジェクトで使用しており、適用する標準が今後も使用されることです。フォーム。

したがって、基本的には、ASP.NETのフィールドバリデーターが提供する一般的な単純さを大幅に変更する必要のない一般的なソリューションを見つけたいと思っています。何か案は?

PS:これに注意しないと、セキュリティの脆弱性が発生する可能性があることに気づきましたか?それがおそらくMicrosoftがデフォルトでそれをしなかった理由です。

4

1 に答える 1

0

バリデーターごとに非表示フィールドを使用し、クライアント側の入力、操作、または必要なものを使用して、javascript を使用してこれらの非表示フィールドに true と false などのカスタム値を入力するという非常に単純なアプローチを使用できます。

フォームがポストバックされると、隠しフィールドの値が true または false であることを確認でき、それらに応じて、サーバー側のバリデーターを有効または無効にできます。

于 2012-07-11T08:57:03.147 に答える