2

CompositeControl から継承し、IPostBackDataHandler、ICallbackEventHandler を実装するサーバー コントロールがあります。

コントロールの CallBackEvent を (Page.ClientScript.GetCallbackEventReference(this, "args", "callBack", "context",true) を使用して) 非同期モードで起動すると、ページのバリデーターが実行されます。 ValidationGroup が定義されています。

ページ内のすべてのバリデーターに ValidationGroup を設定せずにこの動作を回避する必要があり、javascript を使用しないようにしています (コールバックイベントの前にバリデーターを無効にできることはわかっていますが、そうしないようにしています)。そこに着く)。

また、CausesValidation プロパティを使用して false に設定できるように IButtonControl を実装しようとしましたが、うまくいきませんでした。

誰でもこの問題について考えがありますか?

前もって感謝します!!

セバスチャン。

4

1 に答える 1

0

ページの動作に影響を与えずにバリデーターを無効にするサーバー コードの回避策を見つけました。

コントロールの LoadPostData イベントで、コールバックがコントロールから来る場合、ページのすべてのバリデーターを無効にします。そして、バリデーターの実際のステータス (enable プロパティ) は変更されないため、動作には影響しないことがわかりました。つまり、コールバックを作成し、すべてのバリデーターを無効にして起動されないようにし、ポストバックを作成すると、バリデーターは引き続き適切に動作します (以前のコールバックの前に有効になっている場合)

私が使用したコードは次のとおりです。

public virtual bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
    {
        if (postCollection["__CALLBACKID"] == this.UniqueID)
            foreach (IValidator validator in Page.Validators)
                    (validator as WebControl).Enabled = false;
    }

「_ CALLBACKID」を使用してコールバックのソースを確認します。「postCollection[" _EVENTTARGET"]」が null になるのは、ポストバックではなくコールバックであるためです。

于 2010-12-29T15:24:40.307 に答える