Benutzerdefiniertes ASP.NET-Schaltflächensteuerelement - Überschreiben von OnClientClick, aber Beibehalten des vorhandenen Verhaltens?

So habe ich ein benutzerdefiniertes ASP.NET 4-Steuerelement mit dem Namen "SafeClickButton", mit dem das Standardverhalten des clientseitigen Klicks (OnClientClick) außer Kraft gesetzt wird.

Im Wesentlichen versuche ich, die Schaltfläche beim Klicken zu deaktivieren und alle vorhandenen Funktionen (Validierung, Postback usw.) auszuführen.

Es scheint das HTML korrekt wiederzugeben (onclick = "this.disabled = true; __ doPostback ...), und es wird korrekt deaktiviert, aber das Problem liegt bei der Seitenüberprüfung Zurückbuchung und DANN Anzeige der Überprüfungsfehler (wo dies auf Client-Seite erfolgen sollte, ohne dass ein Postback erforderlich ist).

Hier ist der Code für das benutzerdefinierte Steuerelement.

public class SafeClickButton : Button
    {
        public override string OnClientClick
        {
            get
            {
                return string.Format("this.disabled=true;{0}", Page.ClientScript.GetPostBackEventReference(this, string.Empty));
            }
            set
            {
                base.OnClientClick = value;
            }
        }

        protected override PostBackOptions GetPostBackOptions()
        {
            PostBackOptions options = new PostBackOptions(this, string.Empty) {ClientSubmit = true};
            if (Page != null)
            {
                if (CausesValidation && (Page.GetValidators(ValidationGroup).Count > 0))
                {
                    options.PerformValidation = true;
                    options.ValidationGroup = ValidationGroup;
                }
                if (!string.IsNullOrEmpty(PostBackUrl))
                {
                    options.ActionUrl = HttpUtility.UrlPathEncode(ResolveClientUrl(PostBackUrl));
                }
            }
            return options;  
        }
    }

Was mache ich falsch

BEARBEITE

Okay, also fand ich einen Teil des Problems:

return string.Format("this.disabled=true;{0}", Page.ClientScript.GetPostBackEventReference(this, string.Empty));

Wird das dervied Verhalten der Postback-Optionen nicht anwenden.

So änderte ich es zu diesem:

return string.Format("this.disabled=true;{0}", Page.ClientScript.GetPostBackEventReference(GetPostBackOptions()));

Nun wird die Überprüfung auf der Clientseite ordnungsgemäß ausgelöst, aber die Schaltfläche ist nicht wieder aktiviert. FML =)

Ich denke, ich muss jetzt noch gescheit sein und sagen: "Wenn die Validierung fehlschlägt, aktivieren Sie die Schaltfläche erneut."

Irgendwelche Ideen

Antworten auf die Frage(2)

Ihre Antwort auf die Frage