2009-09-16 10 views
7

Ho una pagina ASP.NET (C#) con alcuni controlli di terze parti, alcuni elementi ajaxy e alcuni normali controlli del pulsante ASP.NET.C#: evento di clic sul pulsante ASP.NET non funzionante

Gli eventi di clic sul pulsante non vengono attivati ​​quando si fa clic.

Fare doppio clic sul pulsante in modalità progettazione in VS 2008 passa al code-behind ma non crea il gestore eventi.

La creazione manuale del gestore eventi non aiuta.

L'intera pagina è troppo grande per includere qui, ma questo è il bit superiore:

<%@ 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> 

... e la mia dichiarazione pulsante nella pagina:

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

... e il 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"); 
} 

Qualche idea? potrebbe essere l'ajax o qualcosa del genere? Forse il controllo di rete "obout" di terze parti?

Aggiornamento:
ho risolvere questo problema un mese o due fa, quindi sono tornato a questa domanda a cui rispondere per i posteri, ma non riusciva a ricordare esattamente come ho fissato! (Maledizione, vecchiaia!) Ho avuto un certo successo sostituendo alcuni dei controlli AJAX di ASP.NET con quelli di jQuery UI, ma penso che la vera soluzione fosse che una delle proprietà in uno dei tag puntava a un controllo che non esisteva più

Se vi trovate in questa stessa situazione, provatelo e fatemi sapere cosa funziona nei commenti e posterò la risposta corretta.

+1

C'è qualche JS che potrebbe intercettare e annullare l'invio del modulo? –

+0

Ci sono alcune funzioni js dichiarate nella pagina, ma nulla che viene eseguito quando la pagina viene caricata - è quello che cercherò? – MGOwen

+0

Ciò è probabilmente dovuto a qualche tipo di controllo Ajax sulla tua pagina che interferisce con il post. Iniziare a rimuovere i controlli finché non inizi ad eseguire eventi. –

risposta

2

Change

CodeFile="CompanyCompliance.aspx.cs" 

a

CodeBehind="CompanyCompliance.aspx.cs" 

questione connessa: CodeFile vs CodeBehind

+0

Grazie, ma non viene compilato, viene visualizzato "Impossibile caricare il tipo 'CompanyCompliancePage'. CompanyCompliance.aspx \t 1". Potrebbe essere perché è in vs 2008 (asp.net 3.5) e quindi utilizzando le classi parziali per il codice dietro la pagina? – MGOwen

+0

Esiste una classe .designer.cs? Assicurati inoltre che Inherits = "CompanyCompliancePage" corrisponda al nome della tua classe, potrebbe essere necessario qualificarlo completamente ... Se tutto il resto fallisce, rinominare la pagina corrente, quindi Aggiungi> Nuovo elemento> Modulo contenuto Web> Denominarlo "CompanyCompliance 'assicurati di poter semplicemente rilasciare un pulsante e invocare il gestore onclick, una volta che funziona, copia il codice/markup possibile da quello esistente. – TJB

+0

Pensavo che designer.cs e CodeBehind = "" fossero principalmente solo per versioni precedenti di .net ... è quello che il tuo link sembra dire. Non è corretto? – MGOwen

2

La direttiva eredita sembra indicare un tipo inesistente.

Dai un'occhiata al codice dietro il file della pagina CompanyCompliance - ("CompanyCompliance.aspx.cs").

si dovrebbe trovare lo spazio dei nomi corretto e qualcosa come "public partial class xxx" dove xxx è il nome della classe che dovrebbe corrispondere alla direttiva inherits. forse devi qualificare pienamente il nome come già dichiarato da TJB.

+0

Grazie, ma ha verificato tutto questo prima di inviare una domanda, il tipo esiste. – MGOwen

3

Esperto lo stesso problema di recente - è stato infine determinato che il pulsante è stato disattivato da un metodo juavascript onbeforesubmit (progettato per impedire più invio), e sfortunatamente i moduli Web sembrano controllare lo stato abilitato del pulsante prima di consentire l'evento codebehind da attivare.

+0

grazie charlie A che causevalidation = false ha funzionato! – shradha

15

Durante il debug, verificare la proprietà CausesValidation del proprio pulsante. Per qualche ragione, una delle mie pagine aveva un pulsante predefinito su "Vero". Quando ho impostato esplicitamente su "False", tutto ha funzionato.

4

Ho avuto questo problema proprio ora ed è stato causato da un altro controllo con AutoPostBack = "true" che avrebbe inviato il modulo prima che il pulsante avesse la possibilità di inviare il modulo per attivare l'evento click.

9

So che questo dovrebbe essere risolto ora, ma solo per condividere - Ho appena avuto un problema simile. Nel mio caso, il problema era che avevo uno RequiredFieldValidator in una pagina, che non era visibile perché faceva parte di un popup. Il validatore doveva essere richiamato solo quando si faceva clic sul relativo pulsante "Salva", ma poiché non avevo alcun set ValidationGroup, questo avrebbe impedito alla pagina di inviare qualsiasi pulsante cliccato. L'aggiunta di un ValidationGroup al pulsante destro ha risolto il problema.

0

Per i futuri cercatori di risposta: se si sta assegnando il gestore di clic nel codice dietro, assicurarsi che non sia all'interno di un IsPostBack == false controllo:

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 
} 
1

ho avuto questo problema ho cambiato il pulsante proprietà "UseSubmitBehavior" = false. Ora sta funzionando.

+1

In futuro, ti preghiamo di essere più dettagliato nelle tue risposte.Se fornisci una spiegazione di ciò che hai fatto e perché lo hai fatto, preferibilmente con codice e/o documentazione ufficiale, sarà di grande aiuto per tutti. – DennisW

2

Ho avuto un problema simile ed è stato davvero difficile. Recentemente ho migrato un'app di moduli Web ASP.NET 2.0 VS 2005 a VS 2010 ASP.NET 4.0.

È stato difficile eseguire l'installazione e il bug come previsto, ma il problema dei pulsanti che non attivano l'evento click mi ha fatto venire i nervi.

Alla fine, è stato semplice come non dichiarare un'azione di invio nel modulo site.master. Ho cambiato:

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

a

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

Boom. Problema risolto. Spero che risparmi giorni di risoluzione dei problemi a qualcuno. Purtroppo, non ho potuto trovare nulla su di esso su internet da solo.