none
(Neuerdings ?) einige Buttons ohne Click Ereignis RRS feed

  • Frage

  • Ich habe alle Buttons in meinen Projekten von einer Basisklasse abgeleitet mit dieser Implementierung (siehe unten).
    Jetzt habe ich zwei Instanzen von abgeleiteten Button Klassen, bei denen die OnClick Methode nicht (mehr) aufgerufen wird, wenn ich auf den Button clicke, was ja nur bedeuten kann, das das Click Ereignis nicht auftritt.
    Warum passiert bei einigen wenigen Buttons nichts (mehr) ?
    Gibt es Fälle, in denen das Click Ereignis nicht auftritt, und wenn ja, welche sind das ?

    Am merkwürdigsten ist ein Button auf einer Website, wo ich nichts geändert habe.
    Der funktionierte neulich noch, jetzt passiert nichts mehr, wenn man draufclickt.
    Ist da eventuell mit den letzten automatischen .NET 4.0 Updates ein bug installiert worden ?

    Bitte um Hilfe, bin ratlos.

    Danke und Gruß
    Alexander

    public abstract class ButtonBase : Button
    {
            public ButtonBase()
            {
                Click += new EventHandler(OnClick);
            }
    
            protected virtual void OnClick(object sender, EventArgs e)
            {
            }
    }


    MarcAlexanderD

    Mittwoch, 2. Mai 2012 09:08

Antworten

  • Hallo Stefan,

    ohne Umlaute hilft nichts.
    Ich erzeuge die Buttons dynamisch per Code in einem Control, das per <xyz:Control> in einer ascx Datei deklartiert ist.
    Die ascx Datei wird auch während des Init Ereignisses eines Container Controls erzeugt, das ist bei mir überall so.
    Dieser Button hier wird während des Init Ereignisses des Containers hinzugefügt.
    Auch hat der Button eine eindeutige ID.
    Und alle meine Buttons haben die gleiche Basisklasse.
    Ich bin ratlos, warum das nicht geht.

    Ich überlege eventuell einen workaround.
    Da alle meine Buttons von einer Basisklasse abstammen, deren Click event mit einer Ereingnishandler Methode verbunden ist, könnte ich das so ändern, dass ich das Click event, was ja manchmal nicht auftritt, rausnehme und in OnLoad() am Ende der Methode die OnClick() Methode selbst aufrufe, wenn Page.Request.Form[UniqueID] != null

    Gruß
    Alexander

    MarcAlexanderD

    Mittwoch, 2. Mai 2012 14:53

Alle Antworten

  • Hallo MarcAlexander,

    ich würde den Fehler erstmal in deinem Code suchen.

    Was passiert denn, wenn Du mal verschiedene Breakpoints, bspw. in Page_Load der WebForm bzw. des Controls, das den Button beinhaltet, setzt.

    Wird überhaupt ein Postback ausgelöst? (in dem Fall ist Page.IsPostBack true)

    Falls ein Postback ausgelöst wird, passen die gesendeten Request.Form Parameter, insbesondere der jeweils zum Button passende?

    Wird clientseitig noch etwas gemacht, bevor der PostBack ausgelöst wird?

    Hast Du evtl. neue Software wie einen Virenscanner, ... installiert?

    ...


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Mittwoch, 2. Mai 2012 11:03
    Moderator
  • Hallo Stefan,

    habe in meiner Button Klasse mal in OnLoad den u.g. Code eingefügt.
    Wenn ich in die innere Zeile einen breakpoint setze und den Button clicke, wird der code dort angehalten.
    Page.IsPostBack ist also true und die "form" Variable ergibt "Löschen", was dem Text des Buttons entspricht.
    Ein Click Ereignis findet aber nicht statt.

    Clientseitig passiert hier nichts, soweit ich das überschaue.
    Ich habe auch keinen neuen Virenscanner.
    Auf meinem lokelen Rechner ist Norton Internet Security, aber auf dem Server, auf dem ich die Anwendungen hoste, ist kein Virenscanner und da ist ja der gleiche Effekt.

    Gruß
    Alexander Diestel

                if (Page.IsPostBack)
                {
                    object form = Page.Request.Form[UniqueID];
                }
    


    MarcAlexanderD

    Mittwoch, 2. Mai 2012 12:07
  • Hallo Alexander,

    probier es mal bitte mit einem Text ohne Umlaut. Also bspw. Loeschen anstatt Löschen. (Ist nur als Test gedacht, grundsätzlich sollte das natürlich schon funktionieren).

    Falls es damit auch nicht geht: Kann es sein, dass Du die Buttons, mit denen es nicht funktioniert, dynamisch per Code erzeugst und nicht per Deklaration, bspw. über <xyz:Button ... />? Falls ja, wann genau werden die Buttons hinzugefügt? Dynamische Controls, die auf PostBack reagieren sollen, sollten spät. im Page_Load, besser im Page_Init Event des Containercontrols erzeugt werden. Zusätzlich müssen alle Controls eine eindeutige ID erhalten, also bspw. Control>.ID = "<IrgendwasEindeutiges>"

    Falls das alles nichts hilft, schau dir bitte mal genau die Unterschiede zwischen den Buttons, die funktionieren und denen, die eben nicht funktionieren an. Irgendwo wird es da Unterschiede geben.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Mittwoch, 2. Mai 2012 13:16
    Moderator
  • Hallo Stefan,

    ohne Umlaute hilft nichts.
    Ich erzeuge die Buttons dynamisch per Code in einem Control, das per <xyz:Control> in einer ascx Datei deklartiert ist.
    Die ascx Datei wird auch während des Init Ereignisses eines Container Controls erzeugt, das ist bei mir überall so.
    Dieser Button hier wird während des Init Ereignisses des Containers hinzugefügt.
    Auch hat der Button eine eindeutige ID.
    Und alle meine Buttons haben die gleiche Basisklasse.
    Ich bin ratlos, warum das nicht geht.

    Ich überlege eventuell einen workaround.
    Da alle meine Buttons von einer Basisklasse abstammen, deren Click event mit einer Ereingnishandler Methode verbunden ist, könnte ich das so ändern, dass ich das Click event, was ja manchmal nicht auftritt, rausnehme und in OnLoad() am Ende der Methode die OnClick() Methode selbst aufrufe, wenn Page.Request.Form[UniqueID] != null

    Gruß
    Alexander

    MarcAlexanderD

    Mittwoch, 2. Mai 2012 14:53
  • Hallo MarcAlexander,

    Könntest Du Dein Problem lösen? Wenn ja, es wäre schön, wenn Du posten würdest wie es funktioniert hat,
    denn dann profitieren unter Umständen andere mit dem gleichen Problem davon.

    Grüße,

    Robert


    Robert Breitenhofer, MICROSOFT  Twitter Facebook
    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Mittwoch, 6. Juni 2012 11:59
    Moderator