2009-09-16 93 views
7

Tengo una página ASP.NET (C#) con algunos controles de terceros, algunos elementos ajaxy y algunos controles normales de botones ASP.NET.C# - El botón clic de ASP.NET no funciona

Los eventos de clic de botón no se disparan cuando se hace clic.

Al hacer doble clic en el botón en modo de diseño en VS 2008 cambia al código subyacente pero no crea el controlador de eventos.

Crear el controlador de eventos manualmente no ayuda.

La página entera es demasiado grande como para incluir aquí, pero esta es la parte superior:

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

... y mi declaración de botón en la página:

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

... y el código detrás:

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

¿Alguna idea? podría ser el Ajax o algo así? ¿Tal vez el control de cuadrícula "obout" de terceros?

Actualización:
me fijo esto un mes o dos atrás, por lo que regresó a esta pregunta para contestar para la posteridad, pero no podía recordar exactamente cómo lo arreglé! (¡Maldito seas, vejez!) Tuve un éxito limitado al reemplazar algunos de los controles AJAX de ASP.NET con jQuery UI, pero creo que la verdadera solución fue que una de las propiedades en una de las etiquetas apuntaba a un control eso ya no existía

Si te encuentras en esta misma situación, pruébalo y cuéntame qué funciona en los comentarios y publicaré la respuesta correcta.

+1

¿Hay algún JS que pueda estar interceptando y cancelando el envío del formulario? –

+0

Hay algunas funciones js declaradas en la página, pero nada que se ejecute cuando la página está cargada, ¿es eso lo que estaría buscando? – MGOwen

+0

Esto probablemente se deba a algún tipo de control de ajax en su página que interfiere con la publicación. Comience a eliminar controles hasta que comience a ejecutar eventos. –

Respuesta

2

Cambio

CodeFile="CompanyCompliance.aspx.cs" 

a

CodeBehind="CompanyCompliance.aspx.cs" 

pregunta relacionada: CodeFile vs CodeBehind

+0

Gracias, pero no compila, obtengo "No se pudo cargar el tipo 'CompanyCompliancePage'. CompanyCompliance.aspx \t 1". ¿Podría ser porque está en vs 2008 (asp.net 3.5) y así usar clases parciales para el código detrás de la página? – MGOwen

+0

¿Hay una clase .designer.cs? También asegúrese de que Inherits = "CompanyCompliancePage" coincida con su nombre de clase, es posible que necesite calificarlo completamente ... Si todo lo demás falla, cambie el nombre de su página actual, luego agregue> Nuevo elemento> Formulario de contenido web> Name it 'CompanyCompliance 'Asegúrese de que solo puede presionar un botón e invocar el manejador onclick, una vez que funcione, copie tanto como el marcado/código como pueda del existente. – TJB

+0

Pensé que designer.cs y CodeBehind = "" eran principalmente solo para versiones anteriores de .net ... eso es lo que su enlace parece estar diciendo. ¿No es eso correcto? – MGOwen

2

La directiva hereda parece apuntar a un tipo inexistente.

Eche un vistazo al código detrás del archivo de la página CompanyCompliance - ("CompanyCompliance.aspx.cs").

debe encontrar el espacio de nombres correcto y algo así como "clase parcial pública xxx" donde xxx es el nombre de la clase que debe corresponder con su directiva hereda. tal vez deba calificar completamente el nombre como TJB ya indicó.

+0

Gracias, pero verificó todo esto antes de publicar la pregunta, el tipo existe. – MGOwen

3

Experimentó el mismo problema recientemente: finalmente se determinó que el botón se deshabilitó mediante un método juavascript onbeforesubmit (diseñado para evitar presentaciones múltiples) y, lamentablemente, los formularios web parecen verificar el estado habilitado del botón antes de permitir el evento codebehind para disparar.

+0

gracias charlie A que causesvalidation = false funcionó! – shradha

15

Durante la depuración, verifique la propiedad CausesValidation de su botón. Por algún motivo, una de mis páginas tenía un botón predeterminado en "Verdadero". Cuando lo configuré explícitamente como "Falso", todo funcionó.

4

Tuve este problema ahora y fue causado por otro control que tenía un AutoPostBack = "verdadero" que enviaría el formulario antes de que el botón tuviera la oportunidad de enviar el formulario para activar el evento de clic.

9

Sé que esto debería resolverse por ahora, pero solo para compartir, acabo de tener un problema similar. En mi caso, el problema era que tenía un RequiredFieldValidator en una página, que no era visible porque era parte de una ventana emergente. Se suponía que el validador solo se invocaría al hacer clic en el botón "Guardar" relacionado, pero como no tenía ningún ValidationGroup establecido, impediría que la página se envíe para cualquier botón en el que se haya hecho clic. Agregar un ValidationGroup al botón derecho resolvió el problema.

0

Para los futuros solicitantes de respuesta: Si va a asignar el controlador de clic en el código detrás, asegúrese de que no está dentro de un IsPostBack == false cheque:

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

tuve este problema que he cambiado el botón propiedad "UseSubmitBehavior" = false. Ahora está funcionando.

+1

En el futuro, sea más detallado en sus respuestas.Si proporciona una explicación de lo que hizo y por qué lo hizo, de preferencia con un código y/o documentación oficial, será de gran ayuda para todos. – DennisW

2

Tuve un problema similar, y fue realmente complicado. Recientemente migré una aplicación VS. ASP.NET 2.0 de formularios web a VS 2010 ASP.NET 4.0.

Fue difícil de configurar y con errores como se esperaba, pero el problema de los botones que no activaban el evento de clic me estaba poniendo de los nervios.

Al final, fue tan simple como no declarar una acción de envío en el formulario site.master. He cambiado:

<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 resuelto. Espero que ahorre días de resolución de problemas a alguien. Lamentablemente, no pude encontrar nada al respecto en Internet por mi cuenta.

Cuestiones relacionadas