Samstag, Januar 25, 2020

C# – ASP.NET die Schaltfläche click-Ereignis funktioniert nicht

Habe ich eine ASP.NET (C#) Seite mit einigen 3rd-party-controls, einige ajaxy Sachen und ein paar normale ASP.NET Button-Steuerelemente.

Die Button-click-events werden nicht ausgelöst, wenn geklickt wird.

Doppelklick auf den button im design-Modus in VS 2008-Schalter, um die code-behind-aber nicht erstellen Sie den Ereignis-handler.

Erstellung der event-handler manuell nicht helfen.

Die ganze Seite ist zu groß um Sie hier zu zitieren, aber dies ist das oberste bit:

<%@ Page Language="C#" MasterPageFile="~/basewidepage2.master" AutoEventWireup="true" EnableEventValidation="false" CodeFile="CompanyCompliance.aspx.cs" Inherits="CompanyCompliancePage" Title="3DSS" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<%@ Register Assembly="obout_Grid_NET" Namespace="Obout.Grid" TagPrefix="cc2" %>
<%@ Register Src="usercontrols/CalendarEx.ascx" TagName="CalendarEx" TagPrefix="uc2" %>
<%@ MasterType VirtualPath="~/basewidepage2.master" %>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceholder1" runat="Server">

    <script type="text/javascript">
         //a bunch of function declarations
    </script>

…und Taste meine Erklärung auf der Seite:

<asp:Button ID="LicenseCsvButton" runat="server" Text="Export to CSV" OnClick="LicenseCsvButton_Click" />

…und der code-behind:

protected void LicenseCsvButton_Click(object sender, EventArgs e)
{
    //get data
    CompanyCompliance cc = new CompanyCompliance(Master.theCompany.ID);
    DataTable dt = cc.BusinessLicenses.Tables[0];

    //send to browser as download
    Tools.SendTableAsCsvToBrowser(Response, dt, "LicenseData");
}

Irgendwelche Ideen? könnte es sein, die ajax oder so? Vielleicht die 3rd-party – „obout“ grid control?

Update:

Habe ich dieses Problem beheben Sie, einen Monat oder zwei vor, also kam ich zurück, um diese Frage zu beantworten, es für die Nachwelt, aber konnte mich nicht genau erinnern, wie ich es behoben! (Verfluche dich, Alter!) Ich hatte einige begrenzte Erfolg durch ersetzen einige der ASP.NET AJAX-Steuerelemente mit jQuery UI, aber ich denke, die wirkliche Lösung war, dass einer der Eigenschaften, die in eines der tags war, deutete auf ein Steuerelement, das nicht mehr existierte.

Wenn Sie in die gleiche situation, versuchen Sie, und lassen Sie mich wissen, was funktioniert in den Kommentaren und ich poste die richtige Antwort.

  • Gibt es eine JS sein könnte abfangen und Abbrechen des Formulars?
  • Es gibt einige js-Funktionen auf der Seite deklariert, aber nichts, das ausgeführt wird, wenn die Seite geladen ist – ist das, was ich Suche?
  • Dies ist wahrscheinlich auf eine Art ajax control auf Ihrer Seite, die sich mit der post. Starten Sie entfernen von Steuerelementen, bis Sie starten, ausführen von Veranstaltungen.
InformationsquelleAutor MGOwen | 2009-09-16

9 Kommentare

  1. 15

    Beim Debuggen, prüfen Sie die CausesValidation-Eigenschaft der Schaltfläche. Für einige Grund, eine meiner Seiten hatte einen Knopf, standardmäßig auf „True“. Wenn ich explizit den Wert „False“ hat alles geklappt.

  2. 9

    Weiß ich, dass dies gelöst werden, indem jetzt, aber nur zu teilen – ich hatte gerade ein ähnliches Problem. In meinem Fall war das problem, dass ich hatte eine RequiredFieldValidator auf einer Seite, das war nicht sichtbar, weil es ein Teil von einem popup-Fenster. Das validator sollte nur aufgerufen, wenn mit einem Klick auf den zugehörigen button „Speichern“, aber da ich noch keine ValidationGroup gesetzt, es würde verhindern, dass die Seite Einreichen für jede Schaltfläche. Hinzufügen eines ValidationGroup die richtige Taste, ist das Problem behoben.

  3. 3

    Erlebt das gleiche Problem vor kurzem – Ursache wurde schließlich festgestellt, dass die Taste deaktiviert wurde, indem eine juavascript Methode onbeforesubmit (entworfen, um zu verhindern, dass mehrere Einreichungen), und leider web-Formulare angezeigt, zu prüfen, den aktivierten Zustand der Schaltfläche davor können Sie die codebehind-Ereignis auslösen.

    • Dank charlie Ein, dass causesvalidation=false gearbeitet!
  4. 3

    Ich hatte dieses problem gerade jetzt, und es verursacht wurde durch eine weitere Kontrolle mit einem AutoPostBack=“true“ würde das Formular abschicken, bevor der button hatte eine chance, senden Sie das Formular zum auslösen des click-Ereignisses.

  5. 2

    Ändern

    CodeFile="CompanyCompliance.aspx.cs" 

    zu

    CodeBehind="CompanyCompliance.aspx.cs"

    Verwandte Frage: CodeFile vs CodeBehind

    • Danke, aber es wird nicht kompiliert, bekomme ich „Konnte nicht geladen werden Typ ‚CompanyCompliancePage‘. CompanyCompliance.aspx-1“. Dies könnte sein, weil es in vs 2008 (asp.net 3.5) und so mit partiellen Klassen für die code-behind-Seite?
    • Gibt es eine .designer.cs-Klasse? Auch stellen Sie sicher, dass Inherits=“CompanyCompliancePage“ entspricht-Klassennamen, können Sie brauchen, um vollständig zu qualifizieren… Wenn alle Stricke reißen, benennen Sie die aktuelle Seite, dann tun Sie Hinzufügen > Neue Artikel > Web-Content-Formular – > nennen Sie es ‚CompanyCompliance‘ stellen Sie sicher, können Sie einfach drop eine Schaltfläche, und rufen Sie das onclick-handler, wenn das funktioniert, dann kopieren Sie über so viel wie das markup / code, wie Sie können aus dem bestehenden ein.
    • Ich dachte, designer.cs und CodeBehind=““ wurden vor allem eben auch für ältere Versionen .net… das ist, was dein link scheint zu sagen. Ist das nicht richtig?
    • Sind Sie mit ASP.net web-Formulare (traditionell) oder ASP.net mvc? die neueste version der Web-Froms verwendet immer noch den code-behind-zuletzt habe ich geprüft… ich kam gerade über diesen link und dachte, es könnte nützlich sein, aber ich denke, die komplizierter als das, was du sagst
    • Nein, web-Formulare verwendet codefile statt codebehind seit 2005. Trotzdem danke.
  6. 2

    Erbt die Richtlinie scheint auf eine nicht-existierende geben.

    Werfen Sie einen Blick in die code-behind-Datei der CompanyCompliance Seite – („CompanyCompliance.aspx.cs“).

    finden Sie den richtigen namespace und so etwas wie „public partial class xxx“ wobei xxx für den Namen der Klasse entsprechen sollte mit Ihr erbt Richtlinie. vielleicht haben Sie voll qualifizieren, die Namen wie TJB schon gesagt.

    • Danke, aber geprüft, alle diese vor der Veröffentlichung die Frage, der Typ vorhanden ist.
  7. 2

    Ich hatte ein ähnliches Problem, und war es wirklich schwierig. Ich habe vor kurzem migriert in einem VS 2005 ASP.NET 2.0 web forms-Anwendung auf VS 2010 ASP.NET 4.0.

    War es schwierig zu setup und buggy wie erwartet, aber die Frage der Tasten nicht auslösen des click-Ereignisses wurde mir auf die Nerven.

    In das Ende, es war so einfach, wie nicht deklarieren, eine submit-Aktion in die Seite.master-form. Ich geändert:

    <FORM runat="server" name="MainForm" method="post" action="Default.aspx" id="m_mainForm" enctype="multipart/form-data">

    zu

    <FORM runat="server" name="MainForm" method="post" id="m_mainForm" enctype="multipart/form-data">

    Boom. Das Problem ist gelöst. Ich hoffe, er spart die Tage mit der Fehlersuche zu jemand. Leider konnte ich nichts finden, es auf dem internet durch mich.

  8. 1

    Ich hatte dieses problem habe ich auch geändert, der Button-Eigenschaft „UseSubmitBehavior“=false. Jetzt ist es Arbeit.

    • In Zukunft bitte ausführlichere Antworten. Wenn Sie eine Erklärung von dem, was Sie getan haben und warum Sie es getan haben, am besten mit code und/oder in offiziellen Unterlagen, es werde eine große Hilfe für alle.
  9. 0

    Für die Zukunft Antwort Suchende : Wenn Sie bei der Zuordnung der click-Ereignishandler im code hinter, stellen Sie sicher, dass es nicht innerhalb eines IsPostBack == false prüfen :

    void Page_Load (object oSender, EventArgs oEventArgs)
    {
       if (IsPostBack == false)
       {
           oButton += new EventHandler(oButton_Click); //does not work
       }
       oButton += new EventHandler(oButton_Click); //does work
    }

Kostenlose Online-Tests