Tengo una casilla de verificación en un formulario:

<asp:CheckBox ID="CheckBox1" runat="server"
Visible="true" AutoPostBack="True" oncheckedchanged="CheckBox1_CheckedChanged" />

No está activando el siguiente evento cuando lo controlo o desactivo.

protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
    if (CheckBox1.Checked)
    {
        preContactTextBox.Visible = true;
        prePracticeCodeTextBox.Visible = true;            
    }
    else
    {
        preContactTextBox.Visible = false;
        prePracticeCodeTextBox.Visible = false;            
    }
}

No está entrando en este evento en absoluto. ¿Que estoy haciendo mal?

Aquí está el código completo:

http://pastebin.com/amQURr91

¿Cómo puedo hacer que active el evento?

3
l--''''''---------'''''''''''' 14 sep. 2011 a las 22:21

4 respuestas

La mejor respuesta

Creo que la devolución de datos no se activa debido al complemento niceforms que está utilizando. Parece que el complemento anula la funcionalidad predeterminada de la casilla de verificación.

Para probar si este es el caso, intente eliminar el atributo class="niceform" de su etiqueta de formulario.

Debido al hecho de que las formas inteligentes anulan el evento onclick, por lo que puedo decir, la única forma de resolver esto es modificar la fuente del complemento niceforms reemplazando la función inputCheck con lo siguiente. He probado esto y funcionó para mí.

function inputCheck(el) { //extend Checkboxes
    el.oldClassName = el.className;
    el.dummy = document.createElement('img');
    el.dummy.src = imagesPath + "0.png";
    if (el.checked) { el.dummy.className = "NFCheck NFh"; }
    else { el.dummy.className = "NFCheck"; }
    el.dummy.ref = el;
    if (isIE == false) { el.dummy.style.left = findPosX(el) + 'px'; el.dummy.style.top = findPosY(el) + 'px'; }
    else { el.dummy.style.left = findPosX(el) + 4 + 'px'; el.dummy.style.top = findPosY(el) + 4 + 'px'; }
    el.dummy.onclick = function () {
        //Set the checked state of the checkbox
        this.ref.checked = this.ref.checked ? false : true;
        //Fire the postback
        this.ref.click();
        if (!this.ref.checked) {
            this.ref.checked = true;
            this.className = "NFCheck NFh";
        }
        else {
            this.ref.checked = false;
            this.className = "NFCheck";
        }
    }
    el.onfocus = function () { this.dummy.className += " NFfocused"; }
    el.onblur = function () { this.dummy.className = this.dummy.className.replace(/ NFfocused/g, ""); }
    el.init = function () {
        this.parentNode.insertBefore(this.dummy, this);
        el.className = "NFhidden";
    }
    el.unload = function () {
        this.parentNode.removeChild(this.dummy);
        this.className = this.oldClassName;
    }
}

Espero que esto ayude.

1
jdavies 14 sep. 2011 a las 20:19

Una sugerencia es almacenar la casilla de verificación en una casilla de verificación temporal y verificar si la verificación temporal es verdadera o falsa. Si esta casilla de verificación está en un formato, entonces necesita una transmisión directa y buscar el control en el campo. SubckbCheckBox_CheckedChanged protegido (remitente ByVal como objeto, ByVal e como System.EventArgs) Dim tempChk As CheckBox Pruebe tempChk = DirectCast (YourFormView.FindControl ("ckbCheckBox"), CheckBox) Si tempChk.Checked = True? Si

    Catch ex As Exception
        lblErrorMessage.Text = " Error occurred during ckbCheckBox.  Following are the errors: <br> " & ex.ToString
    End Try

End Sub
1
ching 8 mar. 2012 a las 21:13

Verificaría para asegurarme de que no tienes validación en algún lugar que impida que el evento se active. No veo nada malo con el código, por lo que la validación es el siguiente culpable más probable.

<asp:CheckBox ID="CheckBox1" runat="server" CausesValidation="false" ... />
2
James Johnson 14 sep. 2011 a las 18:25

El evento CheckedChanged del control Checkbox se produce solo si la propiedad AutoPostBack de la casilla de verificación se especifica con el valor "true".

4
ddd 2 dic. 2012 a las 17:50