es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Botón ASP.NET sin disparar evento en absoluto.

Hace un par de horas publiqué una pregunta sobre mi código que no funciona, después de ver respuestas y soluciones y probarlas, ¡mi código todavía no funciona!

Así que intenté trucos y consejos de depuración para ver qué está pasando y noté que el problema no está en mi código, ¡es porque el botón no está activando un evento!

He intentado estas soluciones y ninguna de ellas ha funcionado:

  • Botón asp.net no activa evento – (stack overflow)
  • Botón OnClick asp.net no activa evento – (stack overflow)
  • Botón asp.net no activa evento – (stack overflow)
  • Botón OnClick asp.net no activa evento – (CODE REDIRECT)
  • ¿El evento de clic del botón no se está activando? – (Microsoft Developer Network)
  • Botón OnClick asp.net no activa evento – (NEWBEDEV)

También intenté agregar CausesValidation en el botón a false y true, reprogramando el evento del botón y eliminando el antiguo del código fuente y la etiqueta html. Intenté agregar EnableEventValidation a true y false en la parte superior del formulario web. Arreglé la vinculación de js para que fuera <script></script>. Nada está funcionando. ¡Por favor ayúdame!

Aquí está la etiqueta HTML:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="sevenCODE.index" %>

<form id="signup-form" runat="server">
        <asp:textbox id="email" textmode="Email" required="true" runat="server"></asp:textbox>
        <asp:button id="btnSubmit" runat="server" text="Notify me" onclick="btnSubmit_Click"></asp:button>
</form>

Y aquí está el código detrás:

protected void btnSubmit_Click(object sender, EventArgs e)
{
    // Este evento es para enviar una dirección de correo electrónico para recibir correos electrónicos futuros.
    string cs = ConfigurationManager.ConnectionStrings["notifyCS"].ConnectionString;

    // también intenté no usar using ()
    using (SqlConnection con = new SqlConnection(cs))
    {

        try
        {
            con.Open();

            // declaraciones SQL
            // comprobar si hay un correo electrónico registrado antes
            string checkEmail = "SELECT User_Email FROM tbl_users WHERE User_Email = @User_Email"; ;

            // comprobar si la suscripción del correo electrónico anterior está activa
            string checkSubscription = "SELECT User_Status FROM tbl_users WHERE User_Email = @User_Email";

            // inserte el correo electrónico como uno nuevo en la base de datos
            string submitEmail = "INSERT INTO tbl_users (User_UID, User_Email, User_Status) VALUES (@User_UID, @User_Email, @User_Status)";

            // actualice la información del correo electrónico si el correo electrónico ya está registrado.
            string updateEmail = "UPDATE tbl_users SET User_UID = @User_UID, User_Status = @User_Status WHERE User_Email = @User_Email";


            // comprobar si el correo electrónico enviado está en la base de datos
            using (SqlCommand cEmailCMD = new SqlCommand(checkEmail, con))
            {
                cEmailCMD.Parameters.AddWithValue("@User_Email", HttpUtility.HtmlEncode(email.Text));
                SqlDataAdapter cEmailSDA = new SqlDataAdapter
                {
                    SelectCommand = cEmailCMD
                };
                DataSet cEmailDS = new DataSet();
                cEmailSDA.Fill(cEmailDS);

                // Si no hay ningún correo electrónico registrado
                if (cEmailDS.Tables[0].Rows.Count == 0)
                {
                    using (SqlCommand sEmailCMD = new SqlCommand(submitEmail, con))
                    {
                        // Genera un UID para agregar y más tarde podamos utilizarlo.
                        string User_UID = System.Guid.NewGuid().ToString().Replace("-", "").ToUpper();

                        // Inserta los datos como un nuevo correo electrónico.
                        sEmailCMD.Parameters.AddWithValue("@User_UID", HttpUtility.HtmlEncode(User_UID));
                        sEmailCMD.Parameters.AddWithValue("@User_Email", HttpUtility.HtmlEncode(email.Text));
                        sEmailCMD.Parameters.AddWithValue("@User_Status", HttpUtility.HtmlEncode("subscribed"));
                        sEmailCMD.ExecuteNonQuery();
                        sEmailCMD.Dispose();
                        con.Close();
                        con.Dispose();
                        email.Text = null;
                        Response.Redirect("index.aspx");
                    }
                }
                // Si hay un correo electrónico registrado
                else
                {
                    // primero comprueba la suscripción del correo electrónico
                    // si la suscripción no es verdadera, podemos volver a suscribir el correo electrónico de nuevo con un UID diferente y cambiar el estado.
                    using (SqlCommand cSubCMD = new SqlCommand(checkSubscription, con))
                    {
                        cSubCMD.Parameters.AddWithValue("@User_Email", HttpUtility.HtmlEncode(email.Text));
                        SqlDataAdapter cSubSDA = new SqlDataAdapter
                        {
                            SelectCommand = cSubCMD
                        };
                        DataSet cSubDS = new DataSet();
                        cSubSDA.Fill(cSubDS);
                        string result = cSubDS.Tables[0].Rows[0]["User_Status"].ToString();
                        if (result != "subscribed")
                        {
                            using (SqlCommand uEmailCMD = new SqlCommand(updateEmail, con))
                            {
                                //Genera UID para actualizar el anterior.
                                string User_UID = System.Guid.NewGuid().ToString().Replace("-", "").ToUpper();

                                // Actualiza los datos.
                                uEmailCMD.Parameters.AddWithValue("@User_UID", HttpUtility.HtmlEncode(User_UID));
                                uEmailCMD.Parameters.AddWithValue("@User_Email", HttpUtility.HtmlEncode(email.Text));
                                uEmailCMD.Parameters.AddWithValue("@User_Status", HttpUtility.HtmlEncode("subscribed"));
                                uEmailCMD.ExecuteNonQuery();
                                uEmailCMD.Dispose();
                                con.Close();
                                con.Dispose();
                                email.Text = null;
                                Response.Redirect("index.aspx");
                            }
                        }
                    }
                }
            }
        }
        // Si hay algún error, muéstrame (depuración)
        // muestra al usuario un mensaje de error (versión final)
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }
        // comprueba si la conexión sigue abierta y, si lo está, por favor, ciérrala y elimínala.
        finally
        {
            if (con.State == ConnectionState.Open)
            {
                con.Close();
                con.Dispose();
            }
        }
    }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el botón en el marcado HTML no está activando el evento btnSubmit_Click en el archivo de código detrás. El usuario ya ha intentado algunas de las soluciones comunes que se encuentran en diferentes foros, como establecer CausesValidation en true o false, volver a codificar el evento del botón y eliminar el antiguo del código fuente y el marcado HTML, configurar EnableEventValidation en true o false en la parte superior del formulario web y arreglar el enlace js para que sea <script></script>. Sin embargo, ninguna de estas soluciones ha funcionado.

    Al mirar el archivo de código detrás, el evento btnSubmit_Click parece estar implementado correctamente, por lo que el problema podría estar en el botón en sí. Una posible solución es verificar si el ID del botón coincide con el que está en el archivo de código detrás. Otra posible solución es intentar agregar UseSubmitBehavior="False" al botón en el marcado HTML. Este atributo desactiva el comportamiento de envío predeterminado del botón, que podría interferir con el evento de clic.

    Es posible que se necesite una depuración adicional para identificar la causa raíz del problema. El usuario puede intentar agregar algunos registros o declaraciones de depuración al archivo de código detrás para ver si se está activando el evento en absoluto. El problema también podría estar relacionado con la configuración del servidor o la versión de ASP.NET que se está utilizando. Revisar los registros del servidor o probar el código en un entorno diferente podría ayudar a identificar el problema.

Comments are closed.