2011-10-17 17 views
6

Tengo una casilla de verificación que está establecida en "falso" como predeterminado en el aspx. Luego hay una función que determina si es verdadera o falsa, el problema es que cuando en la página hay un cuadro de texto y este cuadro de texto tiene un evento de cambio de texto, cuando escribo algo en el cuadro de texto y luego voy a la casilla de verificación que en este momento es visible la primera vez que hago clic en las devoluciones de datos de la página completa y reajusto la casilla de verificación para desmarcar ... entonces necesito hacer clic de nuevo y luego queda ... ¿Qué puedo hacer para que se quede en el primer clic?Persistir si se hace clic en la casilla de verificación a través de la postback

¿Puedo usar algunos javascript para esto o cuáles creen que son mis opciones?

protected void myTextbox_TextChanged(object sender, EventArgs e) 
    { 
     ShowCheckBox(true); 
    } 

    private void ShowCheckBox(bool ckVal) 
    { 
     myCheckBox.Visible = ckVal; 
    } 
+2

Si va a configurar la casilla de verificación para comprobar en su código subyacente, éste debe seguir siendo comprobadas después de la devolución de datos , a menos que haya problemas con viewstate, etc. – Curt

+0

¿Tal vez está configurando el valor verificado 'predeterminado' como falso en código subyacente? –

+0

Sí, lo hago, en una variante if y else pero tengo un punto de quiebre allí y nunca pasa por esa línea – user710502

Respuesta

6

por qué no añadir el cuadro de texto dentro de un panel de actualización o menos así:

<asp:UpdatePanel runat="server" ID="test"> 
    <ContentTemplate> 
     <asp:TextBox ID="TEXTBOX" runat="server" Visible="true" AutoPostBack="true" 
      OnTextChanged="checkUser" >Page Name</asp:TextBox> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="TEXTBOX" EventName="TextChanged" /> 
    </Triggers> 
</asp:UpdatePanel> 
+0

Yeap todo lo que necesitaba era un panel de actualización gracias – user710502

0

No ha publicado el código completo, así que voy a adivinar. Intente configurar la propiedad AutoPostBack para el cuadro de texto en falso y vea si eso lo soluciona.

Si eso no funciona, publique su código o un código de muestra completo que reproduzca el problema.

4

si fuera tú, me gustaría escribir alguna clode en el lado del cliente para mostrar la casilla de verificación u ocultarlo, escritura chupar código en el lado del servidor no es buena y necesita extra de ida y vuelta también se puede utilizar un UpdatePanel para hacer eso

5

Mi mejor opción es que la inicialización de su casilla de verificación (lo que establece Checked en false) se ejecuta en cada devolución. P.ej. cambiar esta

protected void Page_Load(object sender, EventArgs e) 
{ 
    myCheckBox.Checked = false; 
} 

a este

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
     myCheckBox.Checked = false; 
} 

Sin embargo, tendremos que ver algo de código más antes de que podamos ayudar de manera eficaz. Parte del problema podría ser que ViewState no se conserva cuando el control no es visible. Si todo lo que desea hacer es mostrar/ocultar, use javascript como otros han sugerido.

He aquí un ejemplo con jQuery:

$(document).ready(function(){ 
    $("#myTextBox").change(function() { 
    $("#myCheckBox").show(); 
    }); 
}); 
3

casilla si .Visible = false no se representa al cliente. Entonces, cuando se produce la devolución, el valor predeterminado de "falso" es el que está configurado.

Puede controlar todo el tiempo y alternar la visibilidad mediante CSS, por lo que la casilla de verificación siempre forma parte del árbol de control y su ViewState se conserva.

style="display:none" y style="display:inline"

Cuestiones relacionadas