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:
¿Cómo puedo hacer que active el evento?
4 respuestas
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.
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
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" ... />
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".
Preguntas relacionadas
Nuevas preguntas
c#
C # (pronunciado "see sharp") es un lenguaje de programación multi-paradigma de alto nivel, estáticamente tipado desarrollado por Microsoft. El código C # generalmente se dirige a la familia de herramientas y tiempos de ejecución .NET de Microsoft, que incluyen .NET Framework, .NET Core y Xamarin, entre otros. Use esta etiqueta para preguntas sobre el código escrito en las especificaciones formales de C # o C #.