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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
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.
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 keineValidationGroup
gesetzt, es würde verhindern, dass die Seite Einreichen für jede Schaltfläche. Hinzufügen einesValidationGroup
die richtige Taste, ist das Problem behoben.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.
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.
Ändern
zu
Verwandte Frage: CodeFile vs CodeBehind
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.
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:
zu
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.
Ich hatte dieses problem habe ich auch geändert, der Button-Eigenschaft "UseSubmitBehavior"=false. Jetzt ist es Arbeit.
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 :